Description of problem: When a thread which is currently waiting on a condition with pthread_cond_wait () is cancelled with pthread_cancel() and shortly before that, the condition was signalled by pthread_cond_signal(), then the condition variable may become corrupted. If the condition is reused afterwards the thread get stuck in pthread_cond_wait (). Version-Release number of selected component (if applicable): fc5, glibc-2.4-8 und fc3, glibc-2.3.6-0.fc3.1 How reproducible: See attached file. If you execute the program, '+' charecters are displayed as long as all works fine. After a while the condition variable gets corrupted and then '-' characters are displayed. Though the main thread signals the condition repeatedly then, the side thread stucks in pthread_cond_wait. Additional info: A work around to the problem is to destroy and initialize again the condition variable after the thread was cancelled.
Created attachment 138868 [details] C++ program for testing the bug.
This sounds very much like BZ#3123, which is fixed in glibc-2.4-11 (the current FC-5 update glibc). Certainly I couldn't reproduce the problem with your testcase on dual G5 with glibc-2.4-11.