253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
|
/*
* Return the thread-specific Tcl interpreter, creating it if needed
*/
static Tcl_Interp *appfs_TclInterp(void) {
Tcl_Interp *interp;
int pthread_ret;
static __thread int thread_interp_reset_key = 0;
interp = pthread_getspecific(interpKey);
if (interp != NULL && thread_interp_reset_key != interp_reset_key) {
APPFS_DEBUG("Terminating old interpreter and restarting due to reset request.");
Tcl_DeleteInterp(interp);
interp = NULL;
}
if (interp == NULL) {
interp = appfs_create_TclInterp(NULL);
if (interp == NULL) {
return(NULL);
|
>
>
>
|
>
>
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
/*
* Return the thread-specific Tcl interpreter, creating it if needed
*/
static Tcl_Interp *appfs_TclInterp(void) {
Tcl_Interp *interp;
int pthread_ret;
static __thread int thread_interp_reset_key = 0;
int global_interp_reset_key;
global_interp_reset_key = __sync_fetch_and_add(&interp_reset_key, 0);
interp = pthread_getspecific(interpKey);
if (interp != NULL && thread_interp_reset_key != global_interp_reset_key) {
APPFS_DEBUG("Terminating old interpreter and restarting due to reset request.");
Tcl_DeleteInterp(interp);
interp = NULL;
thread_interp_reset_key = global_interp_reset_key;
}
if (interp == NULL) {
interp = appfs_create_TclInterp(NULL);
if (interp == NULL) {
return(NULL);
|