linuxthreads bug in 2.2.4 under ppc linux
Wolfram Gloger
wmglo@dent.med.uni-muenchen.de
Sun Dec 9 04:46:00 GMT 2001
Hi,
> Can you pont me to a specific patch that I can check for? I think Franz
> said the build tree he based his rpm on was very very recent.
I'm appending the relevant patch for manager.c. It's been in CVS
since mid-september, but it is not in the 2.2.4 release.
Regards,
Wolfram.
--- glibc-2.2.4/linuxthreads/manager.c Mon Jul 23 19:54:13 2001
+++ manager.c Wed Sep 12 05:51:41 2001
@@ -130,7 +130,8 @@
/* Raise our priority to match that of main thread */
__pthread_manager_adjust_prio(__pthread_main_thread->p_priority);
/* Synchronize debugging of the thread manager */
- n = __libc_read(reqfd, (char *)&request, sizeof(request));
+ n = TEMP_FAILURE_RETRY(__libc_read(reqfd, (char *)&request,
+ sizeof(request)));
ASSERT(n == sizeof(request) && request.req_kind == REQ_DEBUG);
ufd.fd = reqfd;
ufd.events = POLLIN;
@@ -150,8 +151,17 @@
}
/* Read and execute request */
if (n == 1 && (ufd.revents & POLLIN)) {
- n = __libc_read(reqfd, (char *)&request, sizeof(request));
- ASSERT(n == sizeof(request));
+ n = TEMP_FAILURE_RETRY(__libc_read(reqfd, (char *)&request,
+ sizeof(request)));
+#ifdef DEBUG
+ if (n < 0) {
+ char d[64];
+ write(STDERR_FILENO, d, snprintf(d, sizeof(d), "*** read err %m\n"));
+ } else if (n != sizeof(request)) {
+ write(STDERR_FILENO, "*** short read in manager\n", 26);
+ }
+#endif
+
switch(request.req_kind) {
case REQ_CREATE:
request.req_thread->p_retcode =
@@ -266,8 +276,8 @@
if (__pthread_threads_debug && __pthread_sig_debug > 0) {
request.req_thread = self;
request.req_kind = REQ_DEBUG;
- __libc_write(__pthread_manager_request,
- (char *) &request, sizeof(request));
+ TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request,
+ (char *) &request, sizeof(request)));
suspend(self);
}
/* Run the thread code */
@@ -921,7 +931,8 @@
struct pthread_request request;
request.req_thread = 0;
request.req_kind = REQ_KICK;
- __libc_write(__pthread_manager_request, (char *) &request, sizeof(request));
+ TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request,
+ (char *) &request, sizeof(request)));
}
}
More information about the Libc-alpha
mailing list