linuxthreads bug in 2.2.4 under ppc linux
Kevin B. Hendricks
kevin.hendricks@sympatico.ca
Sun Dec 9 05:47:00 GMT 2001
Hi Wolfram,
Thanks for sending me the patch. It is already in the version I am
working with. So this is probably not the problem.
Thanks for your help.
Kevin
On December 9, 2001 03:34, Wolfram Gloger wrote:
> 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