Tcl Source Code

View Ticket
Login
Ticket UUID: 217982
Title: Exception caused by NULL pointer
Type: Bug Version: obsolete: 8.3.1
Submitter: nobody Created on: 2000-10-26 00:47:08
Subsystem: 49. Threading Assigned To: dkf
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2001-12-14 17:41:36
Resolution: Fixed Closed By: davygrvy
    Closed on: 2001-12-14 10:41:36
Description:
OriginalBugID: 5804 Bug
Version: 8.3.1
SubmitDate: '2000-06-02'
LastModified: '2000-09-01'
Severity: CRIT
Status: Closed
Submitter: techsupp
ChangedBy: davidg
RelatedBugIDs: 5312
OS: Windows NT
OSVersion: NT 4.0 SP5 and Windows 2000 Professional
Machine: Pentium III 600Mhz with 128MB
FixedDate: '2000-09-01'
ClosedDate: '2000-10-25'


Name:
Hugh Vu

Extensions:
No extension

ReproducibleScript:
I am using embedded TCL in my application. I had no problem with 8.2.1 but when I imported 8.3.1 into my application, the following problem occurred: When I closed my application, Windows popped up an error message that reads "The instruction at 0x77f87808 referenced memory at 0x00000010. The memory could not be read."
Using the Visual C++ debugger, I found that on closing, the TCL DLL detached by callling Tcl_Finalize() -> Tcl_FinalizeThread() -> TclFinalizeNotifier() -> Tcl_FinalizeNotifier(0). Since the parameter "clientData" passed to Tcl_FinalizeNotifier is 0, the function DeleteCriticalSection crashed with Access Violation (tsdPtr = NULL). I have no idea why "clientData" value is 0.
Are you aware of any problem or issue resembling this problem I described above?
I don't know if this is caused by my application or a bug in 8.3.1. Any comment from you will be greatly appreciated.



*** win/tclWinNotify.c1999/07/02 22:08:281.5

--- win/tclWinNotify.c2000/06/05 00:50:37

***************

*** 150,155 ****

--- 150,163 ----

  {

      ThreadSpecificData *tsdPtr = (ThreadSpecificData *) clientData;

  

+     /*

+      *  Should the operating system call DllMain with

+      *  DLL_PROCESS_DETACH from any alternate thread path, such

+      *  as Task Manager terminating the process, tsdPtr will

+      *  be NULL and invalid.

+      */

+     if (tsdPtr == NULL) return;

+ 

      DeleteCriticalSection(&tsdPtr->crit);

      CloseHandle(tsdPtr->event);



Try this.  I noticed the same thing with a threaded build. 

-- 07/25/2000 davidg





recent comments by email:



To: [email protected], [email protected]

Subject: RE:  TR#5804

From: Gene Leache <[email protected]>

Date: Thu, 03 Aug 2000 12:10:20 -0400



RE bug report TR#5804:



Possibly you folks have done further analysis on this bug, possibly

not.  I've been wrestling with it since yesterday, and realized this

morning that as NT Thread-Local-Storage (TLS) is used by tcllib, anytime

that a thread other than the initiator causes tcllib to be

deinitialized, the expected data in TLS will not be found, causing

tcllib to initialize the TLS data to zero.  The result (as described in

the bug report) is that the clientData parameter passed to

Tcl_FinalizeNotifier is zero, causing the access violation.  Since the

expected datum is just a pointer to an in-memory structure (whose

contents appear to be correct),  I was able to use Windbg to supply the

expected datum to Tcl_FinalizeNotifier, and allow program execution to

proceed --  tcllib was deinitizialized correctly after doing this

experiment.



Hope this helps,



Gene



Gene, thanks for the comment.

 

-- 08/03/2000 davidg
User Comments: davygrvy added on 2001-12-14 17:41:36:
Logged In: YES 
user_id=7549

If it's not applied, yes please apply it.

dkf added on 2001-09-20 02:53:18:
Logged In: YES 
user_id=79902

Why is this still hanging around?  Should I apply the patch as it stands?

davygrvy added on 2001-09-14 11:20:45:
Logged In: YES 
user_id=7549

no time to do this.

davygrvy added on 2001-05-10 10:02:07:

File Added - 6156: patch.txt

Logged In: YES 
user_id=7549

The patch has not been applied to the core (yet).

davygrvy added on 2001-05-10 09:56:13:
Logged In: YES 
user_id=7549

This bug relates to 219355 as well.

Attachments: