From: SourceForge.net <no...@so...> - 2005-03-13 07:01:40
|
Bugs item #1160057, was opened at 2005-03-09 17:49 Message generated for change (Settings changed) made by dkf You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1160057&group_id=10894 Category: 47. Threading >Group: current: 8.4.9 Status: Open Resolution: None Priority: 5 Submitted By: Simon White (s_a_white) Assigned to: Andreas Kupries (andreas_kupries) Summary: Seg fault from usleep Initial Comment: Am trying to determine what may be going on in tcl that causes this code to crash. Using a main instead of tcl to run the code it appears to work fine. The computer is running MandrakeLinux 10.1: kernel: 2.6.8.1-12mdksmp gcc: 3.4.3-1mdk glibc: 2.3.3-21mdk tcl: 8.4.5-6mdk Code: #include <stdint.h> #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <tcl.h> class Message { public: Message(); ~Message (); }; Message::Message() {} Message::~Message () {} static void *RecallTaskEntry(void *_this) { Message m; usleep(2000000); return 0; } extern "C" int createThread() { pthread_t Recallthread; pthread_create(&Recallthread,NULL,RecallTaskEntry, 0); usleep (50000); pthread_cancel (Recallthread); pthread_join (Recallthread, NULL); return 0; } int TclCreateThread (ClientData clientData, Tcl_Interp *interp, int argc,CONST84 char *argv[]) { createThread (); return TCL_OK; } extern "C" int Thread_Init(Tcl_Interp *interp) { Tcl_CreateCommand(interp,"createThread",TclCreateThread, 0, 0); return TCL_OK; } extern "C" int Thread_SafeInit(Tcl_Interp *interp) { return (Thread_Init(interp)); } Code is C++ compiled as a shared library and run in tcl via: load libThread.so createThread The observed beviour is a segfault which results from doing a pthread_cancel when the thread is in the usleep. The debugger output looks a little confused like possible stack corruption. However as explained it works ok standalone outside of tcl. Things that seem to make it work are: - Removing the Message object from the thread. - Removing Messages destructor. - As a test using sleep and pause instead of usleep appear to work. Any ideas on what is causing this bug? ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2005-03-10 22:42 Message: Logged In: NO Have updated tcl to 8.4.9 and rebuilt the code. Ran it up using tclsh (didn't update tk) and still the seg fault appears. Interestingly I tried valgrind on tclsh and get various complaints about mallocs/free's, but the seg fault disappeared, hmmm. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1160057&group_id=10894 |