﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	difficulty
1638	Signal handling and parameters	Mario Domenech Goulart		"I'm facing a difference in behavior between C4 and C5 regarding signal handling, parameters and load.

The code below hopefully helps illustrate the problem.

There's a loop printing the value of a parameter, and a signal handler that catches SIGHUP and loads a file which sets the parameter.

Case 1: In C4, when the process catches SIGHUP and loads the configuration file, the value of the parameter changes.  In C5, the value doesn't change.

Case 2: if we call {{{(load conf-file)}}} in the toplevel, both C4 and C5 behave the same (expected behavior).

The problem seems to be related to parameters.  I tried this code with a regular variable instead of a parameter (using {{{set!}}} to set it), and in that scenario the program behaves as expected.

{{{
$ cat hup.scm
(cond-expand
 (chicken-4
  (use posix))
 (chicken-5
  (import
   (chicken base)
   (chicken process signal)
   (chicken process-context))))

(define param (make-parameter 42))

(define conf-file (car (command-line-arguments)))

; (load conf-file)

(set-signal-handler!
 signal/hup
 (lambda (signum)
   (print ""reloading conf file"")
   (load conf-file)))

(let loop ()
  (print (param))
  (sleep 1)
  (loop))


$ cat conf.scm
(param 4)


;;; Case 1: `(load conf-file)` in the toplevel commented out
;;; Steps:
;;;  1. run hup.scm
;;;  2. go to another terminal and kill it with signal 1

$ ~/local/chicken-4.13.0/bin/csi -s hup.scm conf.scm
42
42
42
reloading conf file
4
4
4

$ ~/local/chicken-5.1.0/bin/csi -s hup.scm conf.scm
42
42
42
reloading conf file
42
42
42


;;; Case 2: `(load conf-file)` in the toplevel uncommented.
;;; Notice that now the conf file is loaded in the toplevel and
;;; the configuration file contains `(param 4)'.
;;; Steps:
;;;  1. run hup.scm
;;;  2. go to another terminal change param in conf.scm (to 10)
;;;     and kill csi with signal 1
$ ~/local/chicken-4.13.0/bin/csi -s hup.scm conf.scm
4
4
4
reloading conf file
10
10
10

;;; Here the config file has the param set to 10 (previous execution)
;;; and I set it to 12 before sending signal 1 to csi.
$ ~/local/chicken-5.1.0/bin/csi -s hup.scm conf.scm
10
10
10
reloading conf file
12
12
12
}}}"	defect	closed	major	5.3	unknown	5.1.0	fixed	signals, parameters		
