summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpooryorick <com.digitalsmarties@pooryorick.com>2018-06-21 22:21:31 (GMT)
committerpooryorick <com.digitalsmarties@pooryorick.com>2018-06-21 22:21:31 (GMT)
commit56ca35e8a95b8cfaac73104d3699c2b901298a2d (patch)
tree14e05bfc1dadc4a05b0c9c77297092eda6333b09
parent107fb1eb331d7f346dfbdf5e7655a28f4643899c (diff)
downloadtcl-56ca35e8a95b8cfaac73104d3699c2b901298a2d.zip
tcl-56ca35e8a95b8cfaac73104d3699c2b901298a2d.tar.gz
tcl-56ca35e8a95b8cfaac73104d3699c2b901298a2d.tar.bz2
Add custom exit procedure for tcltests executable.
-rw-r--r--generic/tclInt.h1
-rw-r--r--generic/tclTest.c16
-rw-r--r--generic/tclThreadTest.c7
3 files changed, 24 insertions, 0 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 0a3285f..6fc2e85 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -4532,6 +4532,7 @@ MODULE_SCOPE Tcl_PackageInitProc TclObjTest_Init;
MODULE_SCOPE Tcl_PackageInitProc TclThread_Init;
MODULE_SCOPE Tcl_PackageInitProc Procbodytest_Init;
MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit;
+MODULE_SCOPE void *TclThreadTestFinalize();
/*
*----------------------------------------------------------------
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 45cca5a..952f384 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -52,6 +52,7 @@
#define TCL_STORAGE_CLASS DLLEXPORT
EXTERN int Tcltest_Init(Tcl_Interp *interp);
EXTERN int Tcltest_SafeInit(Tcl_Interp *interp);
+EXTERN TCL_NORETURN void Tcltest_Exit(ClientData clientData);
/*
* Dynamic string shared by TestdcallCmd and DelCallbackProc; used to collect
@@ -563,6 +564,10 @@ Tcltest_Init(
return TCL_ERROR;
}
+
+ /* Finalizer */
+ Tcl_SetExitProc(Tcltest_Exit);
+
/*
* Create additional commands and math functions for testing Tcl.
*/
@@ -790,6 +795,17 @@ Tcltest_SafeInit(
return Procbodytest_SafeInit(interp);
}
+TCL_NORETURN void Tcltest_Exit(
+ ClientData clientData
+) {
+ int status = PTR2INT(clientData);
+ Tcl_Finalize();
+ TclThreadTestFinalize();
+ TclpExit(status);
+ Tcl_Panic("OS exit failed!");
+}
+
+
/*
*----------------------------------------------------------------------
*
diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c
index 6fc0e52..3d63964 100644
--- a/generic/tclThreadTest.c
+++ b/generic/tclThreadTest.c
@@ -176,6 +176,13 @@ TclThread_Init(
}
+void * TclThreadTestFinalize() {
+ if (errorProcString != NULL) {
+ ckfree(errorProcString);
+ errorProcString= NULL;
+ }
+}
+
/*
*----------------------------------------------------------------------
*