Date: Fri, 11 Apr 1997 19:10:03 +0200 (MET DST) From: "Alex Fenyo (eowyn)" <fenyo@email.enst.fr> To: current@FreeBSD.ORG Cc: jb@cimlogic.com.au Subject: Bug in libc_r implementation of pthread_cond_wait Message-ID: <199704111710.TAA20766@nikopol.enst.fr>
next in thread | raw e-mail | index | archive | help
I encountered a problem using pthread_cond_wait() that seems to be broken : the thread that calls pthread_cond_wait() is always rescheduled (even if there is no call to pthread_cond_signal() or other reason to be rescheduled). This is due to the fact that _thread_kern_sched() (src/lib/libc_r/uthread/uthread_kern.c) tests pthread->wakeup_time.tv_sec for the value -1 to know if the waiting thread is to timeout or wait forever. But pthread_cond_wait() doesn't set this value. Can somebody change this code (pthread_cond_wait() in src/lib/libc_r/uthread/uthread_cond.c) : ------------------------------------------------------------ /* Process according to condition variable type: */ switch ((*cond)->c_type) { /* Fast condition variable: */ case COND_TYPE_FAST: /* Queue the running thread for the condition variable: */ _thread_queue_enq(&(*cond)->c_queue, _thread_run ); ------------------------------------------------------------ by this one : ------------------------------------------------------------ /* Process according to condition variable type: */ switch ((*cond)->c_type) { /* Fast condition variable: */ case COND_TYPE_FAST: _thread_run->wakeup_time.tv_sec = -1; /* Queue the running thread for the condition variable: */ _thread_queue_enq(&(*cond)->c_queue, _thread_run ); ------------------------------------------------------------ Alexandre Fenyo
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704111710.TAA20766>