%3 ::nsshell::CurrentThreadHandler ::nsshell::CurrentThreadHandler _eval autocomplete completion_elements context require eval heartbeat info_complete init ::nsshell::Handler ::nsshell::Handler ::nsshell::CurrentThreadHandler->::nsshell::Handler ::nsshell::KernelThreadHandler ::nsshell::KernelThreadHandler dropKernel eval init useKernel ::nsshell::KernelThreadHandler->::nsshell::Handler ::nx::Object ::nx::Object ::nsshell::Handler->::nx::Object

Class ::nsshell::KernelThreadHandler

::nsshell::KernelThreadHandler[i] create ... \
           [ -kernel (default "") ] \
           [ -kernels (default "") ] \
           [ -supported:1..n (default "eval dropKernel") ]

Defined in /usr/local/ns/tcl/nsshell/shell.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nsshell::Handler[i]
::nx::Class create ::nsshell::KernelThreadHandler \
     -superclass ::nsshell::Handler

Methods (to be applied on instances)

  • dropKernel (scripted, public)

     <instance of nsshell::KernelThreadHandler[i]> dropKernel name

    Delete a kernel in memory. This method actually deletes the interpreter used for the kernel.

    Parameters:
    name

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    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."
    }
  • eval (scripted, public)

     <instance of nsshell::KernelThreadHandler[i]> eval arg kernel \
        channel

    Evalulate the command provided by "$arg" in the specified kernel.

    Parameters:
    arg
    kernel
    channel

    Partial Call Graph (max 5 caller/called nodes):
    %3 nsshell::debug nsshell::debug nsshell::KernelThreadHandler instproc eval nsshell::KernelThreadHandler instproc eval nsshell::KernelThreadHandler instproc eval->nsshell::debug

    Testcases:
    No testcase defined.
    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
  • useKernel (scripted, public)

     <instance of nsshell::KernelThreadHandler[i]> useKernel name

    Create or use the named kernel. If the kernel does not exist, create it new by creating an slave interpreter.

    Parameters:
    name

    Partial Call Graph (max 5 caller/called nodes):
    %3

    Testcases:
    No testcase defined.
    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
    }