SHAREDSvLOCK(threads);
SHAREDSvEDIT(threads);
- PERL_THREAD_ALLOC_SPECIFIC(self_key);
PERL_THREAD_SETSPECIFIC(self_key,INT2PTR(void*,thread->tid));
thread_tid_ptr = Perl_newSVuv(PL_sharedsv_space, thread->tid);
thread_ptr = Perl_newSVuv(PL_sharedsv_space, PTR2UV(thread));
obj = newSVrv(obj_ref, class);
sv_setiv(obj, (IV)thread);
SvREADONLY_on(obj);
-
+ PerlIO_flush((PerlIO*)NULL);
current_perl = PERL_GET_CONTEXT;
/*
temp_store = Perl_get_sv(current_perl, "threads::paramtempstore",
TRUE | GV_ADDMULTI);
- Perl_sv_setsv(current_perl, temp_store,params);
+ Perl_sv_setsv_flags(current_perl, temp_store,params, SV_GMAGIC);
params = NULL;
temp_store = NULL;
temp_store = Perl_get_sv(current_perl, "threads::calltempstore",
TRUE | GV_ADDMULTI);
- Perl_sv_setsv(current_perl,temp_store, init_function);
+ Perl_sv_setsv_flags(current_perl,temp_store, init_function, SV_GMAGIC);
init_function = NULL;
temp_store = NULL;
* inteprreter */
temp_store = Perl_get_sv(thread->interp, "threads::paramtempstore",FALSE);
- Perl_sv_setsv(thread->interp,temp_store, &PL_sv_undef);
+ Perl_sv_setsv_flags(thread->interp,temp_store, &PL_sv_undef, SV_GMAGIC);
temp_store = Perl_get_sv(thread->interp,"threads::calltempstore",FALSE);
- Perl_sv_setsv(thread->interp,temp_store, &PL_sv_undef);
+ Perl_sv_setsv_flags(thread->interp,temp_store, &PL_sv_undef, SV_GMAGIC);
PERL_SET_CONTEXT(current_perl);
temp_store = Perl_get_sv(current_perl,"threads::paramtempstore",FALSE);
- Perl_sv_setsv(current_perl, temp_store, &PL_sv_undef);
+ Perl_sv_setsv_flags(current_perl, temp_store, &PL_sv_undef, SV_GMAGIC);
temp_store = Perl_get_sv(current_perl,"threads::calltempstore",FALSE);
- Perl_sv_setsv(current_perl, temp_store, &PL_sv_undef);
+ Perl_sv_setsv_flags(current_perl, temp_store, &PL_sv_undef, SV_GMAGIC);
/* let's init the thread */
# ifdef PTHREAD_ATTR_SETDETACHSTATE
PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable);
# endif
+# ifdef THREAD_CREATE_NEEDS_STACK
+ if(pthread_attr_setstacksize(&attr, THREAD_CREATE_NEEDS_STACK))
+ croak("panic: pthread_attr_setstacksize failed");
+# endif
+
#ifdef OLD_PTHREADS_API
pthread_create( &thread->thr, attr, Perl_thread_run, (void *)thread);
#else
MODULE = threads PACKAGE = threads
BOOT:
Perl_sharedsv_init(aTHX);
+ PERL_THREAD_ALLOC_SPECIFIC(self_key);
PL_perl_destruct_level = 2;
threads = Perl_sharedsv_new(aTHX);
SHAREDSvEDIT(threads);
RETVAL
SV *
+new (class, function_to_call, ...)
+ char * class
+ SV * function_to_call
+ CODE:
+ AV* params = newAV();
+ if(items > 2) {
+ int i;
+ for(i = 2; i < items ; i++) {
+ av_push(params, ST(i));
+ }
+ }
+ RETVAL = Perl_thread_create(class, function_to_call, newRV_noinc((SV*) params));
+ OUTPUT:
+ RETVAL
+
+
+
+SV *
self (class)
char* class
CODE: