On Sat, Jan 16, 2010 at 3:19 PM, <korli@xxxxxxxxxxxxxxxx> wrote: > Author: korli > Date: 2010-01-16 16:19:50 +0100 (Sat, 16 Jan 2010) > New Revision: 35098 > Changeset: http://dev.haiku-os.org/changeset/35098/haiku > Ticket: http://dev.haiku-os.org/ticket/5271 > > Modified: > haiku/trunk/src/system/libroot/posix/pthread/pthread.c > Log: > * don't destroy an already dead thread. Fixed #5271. Maybe we should only > make this check on the sMainThread though. > * Implementations of pthread_getschedparam and pthread_setschedparam I had > since a while. Did you forget to change pthread.h? -- Grzegorz Dąbrowski (kaliber) http://tiltos.com http://home.gna.org/pingwinek/ > > > Modified: haiku/trunk/src/system/libroot/posix/pthread/pthread.c > =================================================================== > --- haiku/trunk/src/system/libroot/posix/pthread/pthread.c 2010-01-16 > 13:56:59 UTC (rev 35097) > +++ haiku/trunk/src/system/libroot/posix/pthread/pthread.c 2010-01-16 > 15:19:50 UTC (rev 35098) > @@ -52,6 +52,10 @@ > __pthread_destroy_thread(void) > { > pthread_thread* thread = pthread_self(); > + > + // check if the thread is already dead > + if ((atomic_get(&thread->flags) & THREAD_DEAD) != 0) > + return; > > // call cleanup handlers > while (true) { > @@ -243,6 +247,34 @@ > } > > > +int > +pthread_getschedparam(pthread_t thread, int *policy, struct sched_param > *param) > +{ > + thread_info info; > + status_t status = _kern_get_thread_info(thread->id, &info); > + if (status == B_BAD_THREAD_ID) > + return ESRCH; > + param->sched_priority = info.priority; > + if (policy != NULL) > + *policy = SCHED_RR; > + return 0; > +} > + > + > +int > +pthread_setschedparam(pthread_t thread, int policy, > + const struct sched_param *param) > +{ > + status_t status; > + if (policy != SCHED_RR) > + return ENOTSUP; > + status = _kern_set_thread_priority(thread->id, param->sched_priority); > + if (status == B_BAD_THREAD_ID) > + return ESRCH; > + return status; > +} > + > + > // #pragma mark - Haiku thread API bridge > > > > >