|
From: | Helmut Eller |
Subject: | bug#6079: 24.0.50; set-process-sentinel doesn't work inside sentinels |
Date: | Sun, 02 May 2010 14:07:52 +0200 |
User-agent: | Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
set-process-sentinel can't be used inside sentinels because exec_sentinel_unwind always restores the old value. This code (let* ((proc (start-process "foo" nil "/bin/bash" "-c" "sleep 100")) (a-called nil) (sentinel-a (lambda (proc msg) (message "a: %s" msg) (setq a-called t))) (b-called nil) (sentinel-b (lambda (proc msg) (message "b: %s" msg) (set-process-sentinel proc sentinel-a) (setq b-called t)))) (set-process-sentinel proc sentinel-b) (signal-process proc 'SIGSTOP) (message "waiting for b") (while (not b-called) (accept-process-output proc)) (signal-process proc 'SIGKILL) (message "waiting for a") (while (not a-called) (accept-process-output proc))) prints: waiting for b b: stopped (signal) waiting for a b: killed which means that sentinel-b was called twice. Since sentinel-b sets the the process sentinel to sentinel-a I would expect that sentinel-b can only be called once.
[Prev in Thread] | Current Thread | [Next in Thread] |