Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | improvement in AfterInfo/AfterProc |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f97755fb7cf4850723f8194a887b3e92 |
User & Date: | chw 2017-05-25 00:52:32 |
Context
2017-05-27
| ||
05:23 | add tklib upstream changes check-in: 673ddca41c user: chw tags: trunk | |
2017-05-25
| ||
01:01 | merge with trunk check-in: e08f3c783d user: chw tags: wtf-8-experiment | |
00:52 | improvement in AfterInfo/AfterProc check-in: f97755fb7c user: chw tags: trunk | |
2017-05-24
| ||
18:08 | fixed some warnings in TclCurl check-in: de87ff984e user: chw tags: trunk | |
Changes
jni/TclCurl/tclconfig/tcl.m4 became executable.
︙ | ︙ |
jni/tcl/compat/zlib/win32/zdll.lib became executable.
cannot compute difference between binary files
jni/tcl/compat/zlib/win32/zlib1.dll became executable.
cannot compute difference between binary files
jni/tcl/compat/zlib/win64/zlib1.dll became executable.
cannot compute difference between binary files
jni/tcl/compat/zlib/zlib2ansi became executable.
︙ | ︙ |
Changes to jni/tcl/generic/tclTimer.c.
︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 53 54 55 56 | int id; /* Integer identifier for command; used to * cancel it. */ Tcl_TimerToken token; /* Used to cancel the "after" command. NULL * means that the command is run as an idle * handler rather than as a timer handler. * NULL means this is an "after idle" handler * rather than a timer handler. */ struct AfterInfo *nextPtr; /* Next in list of all "after" commands for * this interpreter. */ } AfterInfo; /* * One of the following structures is associated with each interpreter for * which an "after" command has ever been invoked. A pointer to this structure | > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | int id; /* Integer identifier for command; used to * cancel it. */ Tcl_TimerToken token; /* Used to cancel the "after" command. NULL * means that the command is run as an idle * handler rather than as a timer handler. * NULL means this is an "after idle" handler * rather than a timer handler. */ struct AfterInfo *prevPtr; /* Previous in list of all "after" commands for * this interpreter. */ struct AfterInfo *nextPtr; /* Next in list of all "after" commands for * this interpreter. */ } AfterInfo; /* * One of the following structures is associated with each interpreter for * which an "after" command has ever been invoked. A pointer to this structure |
︙ | ︙ | |||
886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 | if (wakeup.usec > 1000000) { wakeup.sec++; wakeup.usec -= 1000000; } } afterPtr->token = TclCreateAbsoluteTimerHandler(&wakeup, AfterProc, afterPtr); afterPtr->nextPtr = assocPtr->firstAfterPtr; assocPtr->firstAfterPtr = afterPtr; Tcl_SetObjResult(interp, Tcl_ObjPrintf("after#%d", afterPtr->id)); return TCL_OK; } case AFTER_CANCEL: { Tcl_Obj *commandPtr; const char *command, *tempCommand; | > > > > | 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 | if (wakeup.usec > 1000000) { wakeup.sec++; wakeup.usec -= 1000000; } } afterPtr->token = TclCreateAbsoluteTimerHandler(&wakeup, AfterProc, afterPtr); afterPtr->prevPtr = NULL; afterPtr->nextPtr = assocPtr->firstAfterPtr; if (afterPtr->nextPtr != NULL) { afterPtr->nextPtr->prevPtr = afterPtr; } assocPtr->firstAfterPtr = afterPtr; Tcl_SetObjResult(interp, Tcl_ObjPrintf("after#%d", afterPtr->id)); return TCL_OK; } case AFTER_CANCEL: { Tcl_Obj *commandPtr; const char *command, *tempCommand; |
︙ | ︙ | |||
947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 | } else { afterPtr->commandPtr = Tcl_ConcatObj(objc-2, objv+2); } Tcl_IncrRefCount(afterPtr->commandPtr); afterPtr->id = tsdPtr->afterId; tsdPtr->afterId += 1; afterPtr->token = NULL; afterPtr->nextPtr = assocPtr->firstAfterPtr; assocPtr->firstAfterPtr = afterPtr; Tcl_DoWhenIdle(AfterProc, afterPtr); Tcl_SetObjResult(interp, Tcl_ObjPrintf("after#%d", afterPtr->id)); break; case AFTER_INFO: if (objc == 2) { Tcl_Obj *resultObj = Tcl_NewObj(); | > > > > | 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 | } else { afterPtr->commandPtr = Tcl_ConcatObj(objc-2, objv+2); } Tcl_IncrRefCount(afterPtr->commandPtr); afterPtr->id = tsdPtr->afterId; tsdPtr->afterId += 1; afterPtr->token = NULL; afterPtr->prevPtr = NULL; afterPtr->nextPtr = assocPtr->firstAfterPtr; if (afterPtr->nextPtr != NULL) { afterPtr->nextPtr->prevPtr = afterPtr; } assocPtr->firstAfterPtr = afterPtr; Tcl_DoWhenIdle(AfterProc, afterPtr); Tcl_SetObjResult(interp, Tcl_ObjPrintf("after#%d", afterPtr->id)); break; case AFTER_INFO: if (objc == 2) { Tcl_Obj *resultObj = Tcl_NewObj(); |
︙ | ︙ | |||
1167 1168 1169 1170 1171 1172 1173 | static void AfterProc( ClientData clientData) /* Describes command to execute. */ { AfterInfo *afterPtr = clientData; AfterAssocData *assocPtr = afterPtr->assocPtr; | < < | < | | > | 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 | static void AfterProc( ClientData clientData) /* Describes command to execute. */ { AfterInfo *afterPtr = clientData; AfterAssocData *assocPtr = afterPtr->assocPtr; int result; Tcl_Interp *interp; /* * First remove the callback from our list of callbacks; otherwise someone * could delete the callback while it's being executed, which could cause * a core dump. */ if (assocPtr->firstAfterPtr == afterPtr) { assocPtr->firstAfterPtr = afterPtr->nextPtr; } else { afterPtr->prevPtr->nextPtr = afterPtr->nextPtr; } if (afterPtr->nextPtr != NULL) { afterPtr->nextPtr->prevPtr = afterPtr->prevPtr; } /* * Execute the callback. */ interp = assocPtr->interp; |
︙ | ︙ | |||
1230 1231 1232 1233 1234 1235 1236 | *---------------------------------------------------------------------- */ static void FreeAfterPtr( AfterInfo *afterPtr) /* Command to be deleted. */ { | < < | < | | > | 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 | *---------------------------------------------------------------------- */ static void FreeAfterPtr( AfterInfo *afterPtr) /* Command to be deleted. */ { AfterAssocData *assocPtr = afterPtr->assocPtr; if (assocPtr->firstAfterPtr == afterPtr) { assocPtr->firstAfterPtr = afterPtr->nextPtr; } else { afterPtr->prevPtr->nextPtr = afterPtr->nextPtr; } if (afterPtr->nextPtr != NULL) { afterPtr->nextPtr->prevPtr = afterPtr->prevPtr; } Tcl_DecrRefCount(afterPtr->commandPtr); ckfree(afterPtr); } /* *---------------------------------------------------------------------- |
︙ | ︙ | |||
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 | { AfterAssocData *assocPtr = clientData; AfterInfo *afterPtr; while (assocPtr->firstAfterPtr != NULL) { afterPtr = assocPtr->firstAfterPtr; assocPtr->firstAfterPtr = afterPtr->nextPtr; if (afterPtr->token != NULL) { Tcl_DeleteTimerHandler(afterPtr->token); } else { Tcl_CancelIdleCall(AfterProc, afterPtr); } Tcl_DecrRefCount(afterPtr->commandPtr); ckfree(afterPtr); | > > > | 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 | { AfterAssocData *assocPtr = clientData; AfterInfo *afterPtr; while (assocPtr->firstAfterPtr != NULL) { afterPtr = assocPtr->firstAfterPtr; assocPtr->firstAfterPtr = afterPtr->nextPtr; if (afterPtr->nextPtr != NULL) { afterPtr->nextPtr->prevPtr = afterPtr->prevPtr; } if (afterPtr->token != NULL) { Tcl_DeleteTimerHandler(afterPtr->token); } else { Tcl_CancelIdleCall(AfterProc, afterPtr); } Tcl_DecrRefCount(afterPtr->commandPtr); ckfree(afterPtr); |
︙ | ︙ |
jni/tcl/library/tzdata/Australia/Eucla became a regular file.
︙ | ︙ |