From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1764 invoked by alias); 6 Jan 2003 14:48:41 -0000 Mailing-List: contact pthreads-win32-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sources.redhat.com Received: (qmail 1736 invoked from network); 6 Jan 2003 14:48:37 -0000 Received: from unknown (HELO sotr0085.cognos.com) (205.210.232.62) by 209.249.29.67 with SMTP; 6 Jan 2003 14:48:37 -0000 Received: by sotr0085.cognos.com with Internet Mail Service (5.5.2653.19) id ; Mon, 6 Jan 2003 09:47:53 -0500 Message-ID: From: "Bossom, John" To: "'beckmann.bremen@t-online.de'" , pthreads-win32@sources.redhat.com Subject: RE: pthread_key_create destructor Date: Mon, 06 Jan 2003 14:48:00 -0000 MIME-Version: 1.0 Content-Type: text/plain X-SW-Source: 2003/txt/msg00001.txt.bz2 Note: You need to call pthread_exit() in your example... you should be able to find documentation in several books that indicate that you need to do this to ensure the key destructors are called on the main thread of execution (i.e. this is not a pthread-win32 specific thing) Cheers, John -----Original Message----- From: beckmann.bremen@t-online.de [mailto:beckmann.bremen@t-online.de] Sent: Friday, January 03, 2003 10:30 AM To: pthreads-win32@sources.redhat.com Subject: pthread_key_create destructor Hi, I have a problem with pthread_key_create (). I'm using the latest(2002-11-4) pre-build pthreadVC.dll on Windows XP with MSVC++ 6.0. I wrote the following example to explain the problem: #include #include #include pthread_key_t key; void destructor (void *ptr) { printf ((char*)ptr); free (ptr); } int main (int argc, char *argv[]) { char *ptr; pthread_key_create (&key, &destructor); if ((ptr = pthread_getspecific(key)) == NULL) { ptr = strdup ("test\n"); pthread_setspecific (key, ptr); } return 0; } I think, this is a valid example, and it works fine as a release version but the debug version crashes inside the destructor() function . The address of ptr inside destructor() is the same as inside main() but when having a look at the memory pointed to by ptr, it is initialized to zero at the end of main but unspecified inside of destructor(). It seems, that the address of ptr is already outside the applications address space or somehow else invalid, so the destructor is called too late. Thanks for any help, Thomas Beckmann This message may contain privileged and/or confidential information. If you have received this e-mail in error or are not the intended recipient, you may not use, copy, disseminate or distribute it; do not open any attachments, delete it immediately from your system and notify the sender promptly by e-mail that you have done so. Thank you.