Class ::nsshell::KernelThreadHandler (public)
::nx::Class ::nsshell::KernelThreadHandler
Defined in /usr/local/ns/tcl/nsshell/shell.tcl
- Testcases:
- No testcase defined.
Source code: :property {supported:1..n {eval dropKernel}} :property {kernel ""} :variable kernels "" :method init {} { # # Create a thread named "kernels" for handling the cmds # THREAD create kernels -cmd [subst { ns_log notice "Kernel thread [self] is running" }] } :public method useKernel {name} { # # Create or use the named kernel. If the kernel does not # exist, create it new by creating an slave interpreter. # if {$name ni ${:kernels} && $name ne ""} { ns_log notice "Kernel thread creates kernel (= interp) '$name'" kernels do [list interp create $name] # autoload nx, should be generalized kernels do [list interp eval $name { package require nx }] lappend :kernels $name } } :public method dropKernel {name} { # # Delete a kernel in memory. This method actually deletes # the interpreter used for the kernel. # if {$name in ${:kernels} && $name ne ""} { ns_log notice "dropKernel: drop kernel '$name'" # # Delete interpreter # kernels do [list interp delete $name] # # Remove name from the kernels list # set posn [lsearch -exact ${:kernels} $name] set list [lreplace ${:kernels} $posn $posn] } else { ns_log notice "dropKernel: No kernel named '$name' defined." } } :public method eval {arg kernel channel} { # # Evaluate the command provided by "$arg" in the # specified kernel. # debug "[current class] eval <$arg> <$kernel>" :useKernel $kernel if {$kernel ne ""} { set cmd [list interp eval $kernel $arg] } else { set cmd $arg } debug "[current class] executes <kernels do $cmd>" try { set info [list status ok result [kernels do $cmd]] } on error {errorMsg} { ns_log warning "nsshell: kernel eval returned error <$errorMsg> $::errorInfo" set info [list status error result $errorMsg] } return $info }XQL Not present: Generic, PostgreSQL, Oracle