Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 May 1999 00:12:25 -0400 (EDT)
From:      Daniel Eischen <eischen@vigrid.com>
To:        des@flood.ping.uio.no, jb@cimlogic.com.au
Cc:        cvs-all@FreeBSD.ORG, cvs-committers@FreeBSD.ORG, jb@FreeBSD.ORG, paul@mu.org
Subject:   Re: cvs commit: src/lib/libc_r/uthread Makefile.inc pthread_private.h          uthread_cond.c uthread_create.c uthread_detach.c
Message-ID:  <199905160412.AAA06902@pcnet1.pcnet.com>

next in thread | raw e-mail | index | archive | help
John Birrell wrote:
> I just want to know if the core dump is in a call to longjmp. If it
> is, then my guess is that the core dump is occurring after a low
> priority thread has just been joined and detached.

This does seem to be the problem.  The following patch lets
me run simple mysqladmin commands without dumping core.

Dan Eischen
eischen@vigrid.com

Index: uthread_exit.c
===================================================================
RCS file: /opt/b/CVS/src/lib/libc_r/uthread/uthread_exit.c,v
retrieving revision 1.7
diff -c -r1.7 uthread_exit.c
*** uthread_exit.c	1999/03/23 05:07:55	1.7
--- uthread_exit.c	1999/05/15 23:44:23
***************
*** 164,175 ****
  	if (pthread_cond_signal(&_gc_cond) != 0)
  		PANIC("Cannot signal gc cond");
  
  	/* Unlock the garbage collector mutex: */
  	if (pthread_mutex_unlock(&_gc_mutex) != 0)
  		PANIC("Cannot lock gc mutex");
  
  	/* This this thread will never be re-scheduled. */
! 	_thread_kern_sched_state(PS_DEAD, __FILE__, __LINE__);
  
  	/* This point should not be reached. */
  	PANIC("Dead thread has resumed");
--- 164,181 ----
  	if (pthread_cond_signal(&_gc_cond) != 0)
  		PANIC("Cannot signal gc cond");
  
+ 	/*
+ 	 * Mark the thread as dead so it will not return if it
+ 	 * gets context switched out when the mutex is unlocked.
+ 	 */
+ 	PTHREAD_SET_STATE(_thread_run, PS_DEAD);
+ 
  	/* Unlock the garbage collector mutex: */
  	if (pthread_mutex_unlock(&_gc_mutex) != 0)
  		PANIC("Cannot lock gc mutex");
  
  	/* This this thread will never be re-scheduled. */
! 	_thread_kern_sched(NULL);
  
  	/* This point should not be reached. */
  	PANIC("Dead thread has resumed");


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199905160412.AAA06902>