* gthr-vxworks.h (__ehdtor): Fix memory leak. The delete hook
runs in the context of the deleter, not the deletee, so we must
use taskVarGet to find the correct memory to free.
(__gthread_key_create): Initialize the task
variable subsystem so that the task variable is still active when
the delete hook is run.
From-SVN: r24079
+Thu Dec 3 11:19:50 1998 Mike Stump <mrs@wrs.com>
+
+ * gthr-vxworks.h (__ehdtor): Fix memory leak. The delete hook
+ runs in the context of the deleter, not the deletee, so we must
+ use taskVarGet to find the correct memory to free.
+ (__gthread_key_create): Initialize the task
+ variable subsystem so that the task variable is still active when
+ the delete hook is run.
+
1998-12-03 Joseph S. Myers <jsm28@cam.ac.uk>
* pdp11.h (TARGET_40_PLUS): Fix typo.
don't map well enough onto VxWorks. */
static void
-__ehdtor ()
+__ehdtor (void *pTcb)
{
- if (eh_context_key)
- free ((void*)eh_context_key);
- eh_context_key = 0;
+ int tid = (int) pTcb;
+ void *p = (void*)taskVarGet(tid, &eh_context_key);
+ if (p != (void*)-1)
+ {
+ if (p)
+ free (p);
+ taskVarSet(tid, &eh_context_key, 0);
+ }
}
/* This only works for the code in libgcc2.c. */
{
*key = 0;
+ /* Do this first so that the task variables are visible during the
+ running of the delete hook. */
+
+ taskVarInit();
+
/* We don't have a way to track dtor here, so instead, we
register a generic routine that can cleanup any task. */