add: return TCL_ERROR;
context: NsTclJobCmd(ClientData arg, Tcl_Interp *interp, int argc, char **argv){    NsInterp *itPtr = arg;    NsServer *servPtr = itPtr->servPtr;    Job *jobPtr, **nextPtrPtr;    int code, new, create, stop, running;    char *cmd, id[20];    Tcl_HashEntry *hPtr;    if (argc != 3) {	Tcl_AppendResult(interp, "wrong # args: should be \"",	    argv[0], " command arg\"", NULL);	Tcl_SetErrorCode(interp, "ns:job", "usage", interp->result, NULL);	return TCL_ERROR;    }    code = TCL_ERROR;    cmd = argv[1];    if (STREQ(cmd, "queue")) {	jobPtr = ns_malloc(sizeof(Job));	jobPtr->flags = jobPtr->code = 0;	jobPtr->nextPtr = NULL;	jobPtr->errorCode = jobPtr->errorInfo = NULL;	Tcl_DStringInit(&jobPtr->ds);	Tcl_DStringAppend(&jobPtr->ds, argv[2], -1);	Ns_MutexLock(&servPtr->job.lock);	stop = servPtr->job.stop;	if (!stop) {	    nextPtrPtr = &servPtr->job.firstPtr;	    while (*nextPtrPtr != NULL) {		nextPtrPtr = &((*nextPtrPtr)->nextPtr);	    }	    *nextPtrPtr = jobPtr;	    if (servPtr->job.threads.idle == 0 &&		servPtr->job.threads.current < servPtr->job.threads.max) {		create = 1;		++servPtr->job.threads.current;	    } else {		create = 0;	    }	    do {		sprintf(id, "job%d", servPtr->job.nextid++);		hPtr = Tcl_CreateHashEntry(&servPtr->job.table, id, &new);	    } while (!new);	    Tcl_SetHashValue(hPtr, jobPtr);	    Ns_CondBroadcast(&servPtr->job.cond);	}	Ns_MutexUnlock(&servPtr->job.lock);	if (stop) {	    FreeJob(jobPtr);	} else {	    if (create) {		Ns_ThreadCreate(JobThread, servPtr, 0, NULL);	    }	    Tcl_SetResult(interp, id, TCL_VOLATILE);	    code = TCL_OK;	}    } else if (STREQ(cmd, "wait") || STREQ(cmd, "cancel")) {	Ns_MutexLock(&servPtr->job.lock);	if (!(stop = servPtr->job.stop) && (hPtr = Tcl_FindHashEntry(&servPtr->job.table, argv[2]))) {	    jobPtr = Tcl_GetHashValue(hPtr);	    Tcl_DeleteHashEntry(hPtr);	    if (*cmd == 'c') {		jobPtr->flags |= JOB_CANCEL;		running = jobPtr->flags & JOB_RUNNING;	    } else {		while (!(stop = servPtr->job.stop) && !(jobPtr->flags & JOB_DONE)) {		    Ns_CondWait(&servPtr->job.cond, &servPtr->job.lock);		}	    }	}	Ns_MutexUnlock(&servPtr->job.lock);	if (!stop) {	    if (hPtr == NULL) {		Tcl_AppendResult(interp, "no such job: ", argv[2], NULL);	    	Tcl_SetErrorCode(interp, "ns:job", "nojob", interp->result, NULL);	    } else if (*cmd == 'c') {		Tcl_SetResult(interp, running ? "1" : "0", TCL_STATIC);		code = TCL_OK;	    } else {		Tcl_SetResult(interp, jobPtr->ds.string, TCL_VOLATILE);		Tcl_DStringResult(interp, &jobPtr->ds);		if (jobPtr->errorCode != NULL) {		    Tcl_SetVar(interp, "errorCode", jobPtr->errorCode, TCL_GLOBAL_ONLY);		}		if (jobPtr->errorInfo != NULL) {		    Tcl_SetVar(interp, "errorInfo", jobPtr->errorInfo, TCL_GLOBAL_ONLY);		}		code = jobPtr->code;		FreeJob(jobPtr);	    }	}    } else {	Tcl_AppendResult(interp, "unknown command \"",	    cmd, "\": should be queue, wait, or cancel", NULL);	Tcl_SetErrorCode(interp, "ns:job", "usage", interp->result, NULL);    }    if (stop) {	Tcl_SetResult(interp, "server shutting down", TCL_STATIC);	Tcl_SetErrorCode(interp, "ns:job", "stop", interp->result, NULL);    }    return code;}