diff --git a/py25/bacpypes/core.py b/py25/bacpypes/core.py index 098a357..7bec494 100755 --- a/py25/bacpypes/core.py +++ b/py25/bacpypes/core.py @@ -29,10 +29,16 @@ sleeptime = 0.0 SPIN = 1.0 -def run(spin=SPIN): - if _debug: run._debug("run spin=%r", spin) +def run(spin=SPIN, sigterm=stop, sigusr1=print_stack): + if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1) global running, taskManager, deferredFns, sleeptime + # install the signal handlers if they have been provided (issue #112) + if (sigterm is not None) and hasattr(signal, 'SIGTERM'): + signal.signal(signal.SIGTERM, sigterm) + if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'): + signal.signal(signal.SIGUSR1, sigusr1) + # reference the task manager (a singleton) taskManager = TaskManager() @@ -165,10 +171,6 @@ def stop(*args): bacpypes_debugging(stop) -# set a TERM signal handler -if hasattr(signal, 'SIGTERM'): - signal.signal(signal.SIGTERM, stop) - # # print_stack # @@ -206,10 +208,6 @@ def print_stack(sig, frame): bacpypes_debugging(print_stack) -# set a USR1 signal handler to print a stack trace -if hasattr(signal, 'SIGUSR1'): - signal.signal(signal.SIGUSR1, print_stack) - # # deferred # @@ -242,3 +240,4 @@ def enable_sleeping(stime=0.001): sleeptime = stime bacpypes_debugging(enable_sleeping) + diff --git a/py27/bacpypes/core.py b/py27/bacpypes/core.py index 00b4a16..6de8034 100755 --- a/py27/bacpypes/core.py +++ b/py27/bacpypes/core.py @@ -23,6 +23,64 @@ taskManager = None deferredFns = [] sleeptime = 0.0 +# +# stop +# + +@bacpypes_debugging +def stop(*args): + """Call to stop running, may be called with a signum and frame + parameter if called as a signal handler.""" + if _debug: stop._debug("stop") + global running, taskManager + + if args: + sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) + sys.stderr.flush() + + running = False + + # trigger the task manager event + if taskManager and taskManager.trigger: + if _debug: stop._debug(" - trigger") + taskManager.trigger.set() + +# +# print_stack +# + +@bacpypes_debugging +def print_stack(sig, frame): + """Signal handler to print a stack trace and some interesting values.""" + if _debug: print_stack._debug("print_stack, %r, %r", sig, frame) + global running, deferredFns, sleeptime + + sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) + + sys.stderr.write("---------- globals\n") + sys.stderr.write(" running: %r\n" % (running,)) + sys.stderr.write(" deferredFns: %r\n" % (deferredFns,)) + sys.stderr.write(" sleeptime: %r\n" % (sleeptime,)) + + sys.stderr.write("---------- stack\n") + traceback.print_stack(frame) + + # make a list of interesting frames + flist = [] + f = frame + while f.f_back: + flist.append(f) + f = f.f_back + + # reverse the list so it is in the same order as print_stack + flist.reverse() + for f in flist: + sys.stderr.write("---------- frame: %s\n" % (f,)) + for k, v in f.f_locals.items(): + sys.stderr.write(" %s: %r\n" % (k, v)) + + sys.stderr.flush() + # # run # @@ -30,10 +88,16 @@ sleeptime = 0.0 SPIN = 1.0 @bacpypes_debugging -def run(spin=SPIN): - if _debug: run._debug("run spin=%r", spin) +def run(spin=SPIN, sigterm=stop, sigusr1=print_stack): + if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1) global running, taskManager, deferredFns, sleeptime + # install the signal handlers if they have been provided (issue #112) + if (sigterm is not None) and hasattr(signal, 'SIGTERM'): + signal.signal(signal.SIGTERM, sigterm) + if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'): + signal.signal(signal.SIGUSR1, sigusr1) + # reference the task manager (a singleton) taskManager = TaskManager() @@ -140,72 +204,6 @@ def run_once(): except Exception as err: if _debug: run_once._exception("an error has occurred: %s", err) -# -# stop -# - -@bacpypes_debugging -def stop(*args): - """Call to stop running, may be called with a signum and frame - parameter if called as a signal handler.""" - if _debug: stop._debug("stop") - global running, taskManager - - if args: - sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) - sys.stderr.flush() - - running = False - - # trigger the task manager event - if taskManager and taskManager.trigger: - if _debug: stop._debug(" - trigger") - taskManager.trigger.set() - -# set a TERM signal handler -if hasattr(signal, 'SIGTERM'): - signal.signal(signal.SIGTERM, stop) - -# -# print_stack -# - -@bacpypes_debugging -def print_stack(sig, frame): - """Signal handler to print a stack trace and some interesting values.""" - if _debug: print_stack._debug("print_stack, %r, %r", sig, frame) - global running, deferredFns, sleeptime - - sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) - - sys.stderr.write("---------- globals\n") - sys.stderr.write(" running: %r\n" % (running,)) - sys.stderr.write(" deferredFns: %r\n" % (deferredFns,)) - sys.stderr.write(" sleeptime: %r\n" % (sleeptime,)) - - sys.stderr.write("---------- stack\n") - traceback.print_stack(frame) - - # make a list of interesting frames - flist = [] - f = frame - while f.f_back: - flist.append(f) - f = f.f_back - - # reverse the list so it is in the same order as print_stack - flist.reverse() - for f in flist: - sys.stderr.write("---------- frame: %s\n" % (f,)) - for k, v in f.f_locals.items(): - sys.stderr.write(" %s: %r\n" % (k, v)) - - sys.stderr.flush() - -# set a USR1 signal handler to print a stack trace -if hasattr(signal, 'SIGUSR1'): - signal.signal(signal.SIGUSR1, print_stack) - # # deferred # @@ -237,3 +235,4 @@ def enable_sleeping(stime=0.001): # set the sleep time sleeptime = stime + diff --git a/py34/bacpypes/core.py b/py34/bacpypes/core.py index 00b4a16..6de8034 100755 --- a/py34/bacpypes/core.py +++ b/py34/bacpypes/core.py @@ -23,6 +23,64 @@ taskManager = None deferredFns = [] sleeptime = 0.0 +# +# stop +# + +@bacpypes_debugging +def stop(*args): + """Call to stop running, may be called with a signum and frame + parameter if called as a signal handler.""" + if _debug: stop._debug("stop") + global running, taskManager + + if args: + sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) + sys.stderr.flush() + + running = False + + # trigger the task manager event + if taskManager and taskManager.trigger: + if _debug: stop._debug(" - trigger") + taskManager.trigger.set() + +# +# print_stack +# + +@bacpypes_debugging +def print_stack(sig, frame): + """Signal handler to print a stack trace and some interesting values.""" + if _debug: print_stack._debug("print_stack, %r, %r", sig, frame) + global running, deferredFns, sleeptime + + sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) + + sys.stderr.write("---------- globals\n") + sys.stderr.write(" running: %r\n" % (running,)) + sys.stderr.write(" deferredFns: %r\n" % (deferredFns,)) + sys.stderr.write(" sleeptime: %r\n" % (sleeptime,)) + + sys.stderr.write("---------- stack\n") + traceback.print_stack(frame) + + # make a list of interesting frames + flist = [] + f = frame + while f.f_back: + flist.append(f) + f = f.f_back + + # reverse the list so it is in the same order as print_stack + flist.reverse() + for f in flist: + sys.stderr.write("---------- frame: %s\n" % (f,)) + for k, v in f.f_locals.items(): + sys.stderr.write(" %s: %r\n" % (k, v)) + + sys.stderr.flush() + # # run # @@ -30,10 +88,16 @@ sleeptime = 0.0 SPIN = 1.0 @bacpypes_debugging -def run(spin=SPIN): - if _debug: run._debug("run spin=%r", spin) +def run(spin=SPIN, sigterm=stop, sigusr1=print_stack): + if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1) global running, taskManager, deferredFns, sleeptime + # install the signal handlers if they have been provided (issue #112) + if (sigterm is not None) and hasattr(signal, 'SIGTERM'): + signal.signal(signal.SIGTERM, sigterm) + if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'): + signal.signal(signal.SIGUSR1, sigusr1) + # reference the task manager (a singleton) taskManager = TaskManager() @@ -140,72 +204,6 @@ def run_once(): except Exception as err: if _debug: run_once._exception("an error has occurred: %s", err) -# -# stop -# - -@bacpypes_debugging -def stop(*args): - """Call to stop running, may be called with a signum and frame - parameter if called as a signal handler.""" - if _debug: stop._debug("stop") - global running, taskManager - - if args: - sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) - sys.stderr.flush() - - running = False - - # trigger the task manager event - if taskManager and taskManager.trigger: - if _debug: stop._debug(" - trigger") - taskManager.trigger.set() - -# set a TERM signal handler -if hasattr(signal, 'SIGTERM'): - signal.signal(signal.SIGTERM, stop) - -# -# print_stack -# - -@bacpypes_debugging -def print_stack(sig, frame): - """Signal handler to print a stack trace and some interesting values.""" - if _debug: print_stack._debug("print_stack, %r, %r", sig, frame) - global running, deferredFns, sleeptime - - sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S")) - - sys.stderr.write("---------- globals\n") - sys.stderr.write(" running: %r\n" % (running,)) - sys.stderr.write(" deferredFns: %r\n" % (deferredFns,)) - sys.stderr.write(" sleeptime: %r\n" % (sleeptime,)) - - sys.stderr.write("---------- stack\n") - traceback.print_stack(frame) - - # make a list of interesting frames - flist = [] - f = frame - while f.f_back: - flist.append(f) - f = f.f_back - - # reverse the list so it is in the same order as print_stack - flist.reverse() - for f in flist: - sys.stderr.write("---------- frame: %s\n" % (f,)) - for k, v in f.f_locals.items(): - sys.stderr.write(" %s: %r\n" % (k, v)) - - sys.stderr.flush() - -# set a USR1 signal handler to print a stack trace -if hasattr(signal, 'SIGUSR1'): - signal.signal(signal.SIGUSR1, print_stack) - # # deferred # @@ -237,3 +235,4 @@ def enable_sleeping(stime=0.001): # set the sleep time sleeptime = stime +