Net-Curl
view release on metacpan or search on metacpan
Curl_Share.xsh view on Meta::CPAN
perl_curl_share_delete( pTHX_ perl_curl_share_t *share )
{
#ifdef USE_ITHREADS
long i;
MUTEX_LOCK( &share->mutex_threads );
i = --share->threads;
MUTEX_UNLOCK( &share->mutex_threads );
/* some other thread is using it */
if ( i )
return;
#endif
/* this may trigger some callbacks */
curl_share_cleanup( share->handle );
#ifdef USE_ITHREADS
for ( i = CURL_LOCK_DATA_NONE; i < CURL_LOCK_DATA_LAST; i++ )
MUTEX_DESTROY( &(share->mutex[ i ]) );
MUTEX_DESTROY( &share->mutex_threads );
#endif
Safefree( share );
}
static int
perl_curl_share_magic_free( pTHX_ SV *sv, MAGIC *mg )
{
perl_curl_share_t *share = (perl_curl_share_t *) mg->mg_ptr;
if ( share ) {
perl_curl_share_delete( aTHX_ share );
}
return 0;
}
static MGVTBL perl_curl_share_vtbl = {
NULL, NULL, NULL, NULL
,perl_curl_share_magic_free
,NULL
,perl_curl_share_magic_dup
#ifdef MGf_LOCAL
,NULL
#endif
};
MODULE = Net::Curl PACKAGE = Net::Curl::Share
INCLUDE: const-share-xs.inc
PROTOTYPES: ENABLE
void
new( sclass="Net::Curl::Share", base=HASHREF_BY_DEFAULT )
const char *sclass
SV *base
PREINIT:
perl_curl_share_t *share;
HV *stash;
PPCODE:
if ( ! SvOK( base ) || ! SvROK( base ) )
croak( "object base must be a valid reference\n" );
share = perl_curl_share_new( aTHX );
perl_curl_setptr( aTHX_ base, &perl_curl_share_vtbl, share );
stash = gv_stashpv( sclass, 0 );
ST(0) = sv_bless( base, stash );
share->perl_self = NULL;
XSRETURN(1);
void
setopt( share, option, value )
Net::Curl::Share share
int option
SV * value
PREINIT:
CURLSHcode ret1 = CURLSHE_OK, ret2 = CURLSHE_OK;
CODE:
switch ( option ) {
case CURLSHOPT_LOCKFUNC:
case CURLSHOPT_UNLOCKFUNC:
case CURLSHOPT_USERDATA:
croak( "Lockling is implemented internally" );
break;
case CURLSHOPT_SHARE:
case CURLSHOPT_UNSHARE:
ret1 = curl_share_setopt( share->handle,
option, (long) SvIV( value ) );
break;
default:
ret1 = CURLSHE_BAD_OPTION;
break;
};
if ( ret1 != CURLSHE_OK || ( ret1 = ret2 ) != CURLSHE_OK )
die_code( "Share", ret1 );
SV *
strerror( ... )
PROTOTYPE: $;$
PREINIT:
const char *errstr;
CODE:
if ( items < 1 || items > 2 )
croak( "Usage: Net::Curl::Share::strerror( [share], errnum )" );
errstr = curl_share_strerror( SvIV( ST( items - 1 ) ) );
RETVAL = newSVpv( errstr, 0 );
OUTPUT:
RETVAL
( run in 0.778 second using v1.01-cache-2.11-cpan-5511b514fd6 )