summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhobbs <hobbs>2000-03-30 04:36:08 (GMT)
committerhobbs <hobbs>2000-03-30 04:36:08 (GMT)
commit5f7fd015c795c68b50b9f34e28deb81c5f5549d2 (patch)
tree6b5f76b81d605204fdd5800eab13e5da6f72abeb
parent903cf0c3a7c1b8a6e73f5991bae107beb43e9d21 (diff)
downloadtcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.zip
tcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.tar.gz
tcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.tar.bz2
* generic/tclCompile.c (TclCleanupByteCode): made ByteCode cleanup
more aware of TCL_BYTECODE_PRECOMPILED flagged structs (gen'd by tbcload), to correctly clean them up. * generic/tclClock.c (FormatClock): moved check for empty format earlier, commented 0 result return value
-rw-r--r--ChangeLog11
-rw-r--r--generic/tclClock.c18
-rw-r--r--generic/tclCompile.c21
3 files changed, 45 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 542ef26..f4a662e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,15 @@
+2000-03-29 Jeff Hobbs <hobbs@scriptics.com>
+
+ * generic/tclCompile.c (TclCleanupByteCode): made ByteCode cleanup
+ more aware of TCL_BYTECODE_PRECOMPILED flagged structs (gen'd by
+ tbcload), to correctly clean them up.
+
+ * generic/tclClock.c (FormatClock): moved check for empty format
+ earlier, commented 0 result return value
+
2000-03-29 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: Removed an unnecessary fileevent
+ * library/http2.1/http.tcl: Removed an unnecessary fileevent
statement from the error processing part of the Write method.
Also, fixed two potential memory leaks in wait and reset, in which
the state array wasn't being unset before throwing an exception.
diff --git a/generic/tclClock.c b/generic/tclClock.c
index b155b4d..8b2bc53 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclClock.c,v 1.8 2000/01/26 03:37:40 hobbs Exp $
+ * RCS: @(#) $Id: tclClock.c,v 1.9 2000/03/30 04:36:11 hobbs Exp $
*/
#include "tcl.h"
@@ -282,6 +282,13 @@ FormatClock(interp, clockVal, useGMT, format)
Tcl_MutexUnlock(&clockMutex);
#endif
+ /*
+ * If the user gave us -format "", just return now
+ */
+ if (*format == '\0') {
+ return TCL_OK;
+ }
+
#ifndef HAVE_TM_ZONE
/*
* This is a kludge for systems not having the timezone string in
@@ -340,7 +347,14 @@ FormatClock(interp, clockVal, useGMT, format)
tzset();
}
#endif
- if ((result == 0) && (*format != '\0')) {
+
+ if (result == 0) {
+ /*
+ * A zero return is the error case (can also mean the strftime
+ * didn't get enough space to write into). We know it doesn't
+ * mean that we wrote zero chars because the check for an empty
+ * format string is above.
+ */
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"bad format string \"", format, "\"", (char *) NULL);
return TCL_ERROR;
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index ed7500f..7a9f64d 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclCompile.c,v 1.19 1999/12/12 02:26:41 hobbs Exp $
+ * RCS: @(#) $Id: tclCompile.c,v 1.20 2000/03/30 04:36:11 hobbs Exp $
*/
#include "tclInt.h"
@@ -553,9 +553,26 @@ TclCleanupByteCode(codePtr)
* only need to 1) decrement the ref counts of the LiteralEntry's in
* its literal array, 2) call the free procs for the auxiliary data
* items, and 3) free the ByteCode structure's heap object.
+ *
+ * The case for TCL_BYTECODE_PRECOMPILED (precompiled ByteCodes,
+ * like those generated from tbcload) is special, as they doesn't
+ * make use of the global literal table. They instead maintain
+ * private references to their literals which must be decremented.
*/
- if (interp != NULL) {
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ register Tcl_Obj *objPtr;
+
+ objArrayPtr = codePtr->objArrayPtr;
+ for (i = 0; i < numLitObjects; i++) {
+ objPtr = *objArrayPtr;
+ if (objPtr) {
+ Tcl_DecrRefCount(objPtr);
+ }
+ objArrayPtr++;
+ }
+ codePtr->numLitObjects = 0;
+ } else if (interp != NULL) {
/*
* If the interp has already been freed, then Tcl will have already
* forcefully released all the literals used by ByteCodes compiled