X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=libgc%2Fsolaris_threads.c;h=e6e0ea259c17cdb842657cb8c0927ae8adc4a078;hb=95ac6aa7eb702c07c24c5994bdcda1b99dbda1c1;hp=5f05b19e008040b208a691864ad3e31c6125e047;hpb=470244cc0ef079d0936227fb28ea211bfee9629b;p=mono.git diff --git a/libgc/solaris_threads.c b/libgc/solaris_threads.c index 5f05b19e008..e6e0ea259c1 100644 --- a/libgc/solaris_threads.c +++ b/libgc/solaris_threads.c @@ -16,9 +16,16 @@ */ /* Boehm, September 14, 1994 4:44 pm PDT */ +# include "private/gc_priv.h" + # if defined(GC_SOLARIS_THREADS) || defined(GC_SOLARIS_PTHREADS) -# include "private/gc_priv.h" +/* Avoid #error"Cannot use procfs in the large file compilation environment" */ +#if defined(_ILP32) && (_FILE_OFFSET_BITS != 32) +#undef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 32 +#endif + # include "private/solaris_threads.h" # include # include @@ -248,8 +255,8 @@ static void stop_all_lwps() for (i = 0; i < max_lwps; i++) last_ids[i] = 0; for (;;) { - if (syscall(SYS_ioctl, GC_main_proc_fd, PIOCSTATUS, &status) < 0) - ABORT("Main PIOCSTATUS failed"); + if (syscall(SYS_ioctl, GC_main_proc_fd, PIOCSTATUS, &status) < 0) + ABORT("Main PIOCSTATUS failed"); if (status.pr_nlwp < 1) ABORT("Invalid number of lwps returned by PIOCSTATUS"); if (status.pr_nlwp >= max_lwps) { @@ -262,7 +269,7 @@ static void stop_all_lwps() for (i = 0; i < max_lwps; i++) last_ids[i] = 0; continue; - } + } if (syscall(SYS_ioctl, GC_main_proc_fd, PIOCLWPIDS, GC_current_ids) < 0) ABORT("PIOCLWPIDS failed"); changed = FALSE; @@ -624,6 +631,23 @@ GC_thread GC_lookup_thread(thread_t id) return(p); } +int GC_thread_is_registered (void) +{ + void *ptr; + + LOCK(); + ptr = (void *)GC_lookup_thread(thr_self()); + UNLOCK(); + + return ptr ? 1 : 0; +} + +int GC_thread_register_foreign (void *base_addr) +{ + /* FIXME: */ + return 0; +} + /* Solaris 2/Intel uses an initial stack size limit slightly bigger than the SPARC default of 8 MB. Account for this to warn only if the user has raised the limit beyond the default. @@ -786,6 +810,7 @@ void GC_thr_init(void) { GC_thread t; thread_t tid; + int ret; if (GC_thr_initialized) return; @@ -803,9 +828,11 @@ void GC_thr_init(void) t = GC_new_thread(thr_self()); t -> stack_size = 0; t -> flags = DETACHED | CLIENT_OWNS_STACK; - if (thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon, - 0 /* arg */, THR_DETACHED | THR_DAEMON, - &tid /* thread_id */) != 0) { + ret = thr_create(0 /* stack */, 0 /* stack_size */, GC_thr_daemon, + 0 /* arg */, THR_DETACHED | THR_DAEMON, + &tid /* thread_id */); + if (ret != 0) { + GC_err_printf1("Thr_create returned %ld\n", ret); ABORT("Cant fork daemon"); } thr_setprio(tid, 126);