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?
Andreas Kupries
49. Threading
obsolete: 8.4.9
Public
|
Date: 2005-10-05 08:05 Logged In: YES |
|
Date: 2005-10-05 07:48 Logged In: YES |
|
Date: 2005-10-05 05:31 Logged In: YES |
|
Date: 2005-09-21 09:59 Logged In: YES |
|
Date: 2005-03-13 10:20 Logged In: NO |
|
Date: 2005-03-10 22:42 Logged In: NO |
| Field | Old Value | Date | By |
|---|---|---|---|
| priority | 8 | 2005-10-05 08:05 | hobbs |
| status_id | Pending | 2005-10-05 07:48 | s_a_white |
| close_date | 2005-10-05 05:31 | 2005-10-05 07:48 | s_a_white |
| status_id | Open | 2005-10-05 05:31 | hobbs |
| close_date | - | 2005-10-05 05:31 | hobbs |
| priority | 5 | 2005-03-14 00:51 | dkf |
| artifact_group_id | None | 2005-03-13 07:01 | dkf |
Copyright © 2010 Geeknet, Inc. All rights reserved. Terms of Use