I don't use the broadcast functionality, but, it looks like that is broken too.  signal_all is never reset to 0 after the broadcast function sets it to 1.  Here is an untested fix
 
       cond->num_waiting--;/*we have the lock(s)*/
       if (cond->signal_all) {
   if (cond->num_waiting == 0) {
+      cond->signal_all=0;
      ResetEvent(cond->event);
   }
   done=1;
       }
       else if (cond->signalled) {
   cond->signalled = 0;
   ResetEvent(cond->event);
   done=1;
       }

Bill Stoddard <bill@wstoddard.com> wrote:
E Holyat wrote:
> Here is a patch for win32 that has been tested extensively for a few
> months now. I submitted it to bugzilla
>

Based on a quick code review, I'm +1 for committing this patch.

Bill


Yahoo! Mail
Stay connected, organized, and protected. Take the tour