# HG changeset patch
# User Jeroen Demeyer <jdemeyer@cage.ugent.be>
# Date 1357238060 -3600
# Node ID b61c14deeb02d7aa55afa05ea5d21b727dc9dd3a
# Parent 06b291a2f9840802870775041c1b5214f3666b5a
Fix test_sig_block() test, move all code inside the try/except block
diff --git a/c_lib/include/interrupt.h b/c_lib/include/interrupt.h
a
|
b
|
|
184 | 184 | { |
185 | 185 | _signals.s = message; |
186 | 186 | #if ENABLE_DEBUG_INTERRUPT |
187 | | fprintf(stderr, "sig_on (counter = %i) at %s:%i\n", _signals.sig_on_count+1, file, line); |
| 187 | fprintf(stderr, "sig_on (count = %i) at %s:%i\n", _signals.sig_on_count+1, file, line); |
188 | 188 | fflush(stderr); |
189 | 189 | #endif |
190 | 190 | if (_signals.sig_on_count > 0) |
… |
… |
|
241 | 241 | static inline void _sig_off_(const char* file, int line) |
242 | 242 | { |
243 | 243 | #if ENABLE_DEBUG_INTERRUPT |
244 | | fprintf(stderr, "sig_off (counter = %i) at %s:%i\n", _signals.sig_on_count, file, line); |
| 244 | fprintf(stderr, "sig_off (count = %i) at %s:%i\n", _signals.sig_on_count, file, line); |
245 | 245 | fflush(stderr); |
246 | 246 | #endif |
247 | 247 | if (unlikely(_signals.sig_on_count <= 0)) |
… |
… |
|
311 | 311 | */ |
312 | 312 | static inline void sig_block() |
313 | 313 | { |
| 314 | #if ENABLE_DEBUG_INTERRUPT |
| 315 | if (_signals.block_sigint != 0) |
| 316 | { |
| 317 | fprintf(stderr, "\n*** WARNING *** sig_block() with sig_on_count = %i, block_sigint = %i\n", _signals.sig_on_count, _signals.block_sigint); |
| 318 | print_backtrace(); |
| 319 | } |
| 320 | #endif |
314 | 321 | _signals.block_sigint = 1; |
315 | 322 | } |
316 | 323 | |
317 | 324 | static inline void sig_unblock() |
318 | 325 | { |
| 326 | #if ENABLE_DEBUG_INTERRUPT |
| 327 | if (_signals.block_sigint != 1) |
| 328 | { |
| 329 | fprintf(stderr, "\n*** WARNING *** sig_unblock() with sig_on_count = %i, block_sigint = %i\n", _signals.sig_on_count, _signals.block_sigint); |
| 330 | print_backtrace(); |
| 331 | } |
| 332 | #endif |
319 | 333 | _signals.block_sigint = 0; |
320 | 334 | |
321 | 335 | if (unlikely(_signals.interrupt_received) && _signals.sig_on_count > 0) |
diff --git a/sage/tests/c_lib.c b/sage/tests/c_lib.c
a
|
b
|
|
11 | 11 | #include <signal.h> |
12 | 12 | #include <sys/select.h> |
13 | 13 | #include <sys/wait.h> |
| 14 | #include "interrupt.h" |
14 | 15 | |
15 | 16 | void ms_sleep(long ms) |
16 | 17 | { |
… |
… |
|
52 | 53 | /* New process group to prevent us getting the signals. */ |
53 | 54 | setpgid(0,0); |
54 | 55 | |
| 56 | /* Unblock SIGINT (to fix a warning when testing sig_block()) */ |
| 57 | _signals.block_sigint = 0; |
| 58 | |
55 | 59 | /* Make sure SIGTERM simply terminates the process */ |
56 | 60 | signal(SIGTERM, SIG_DFL); |
57 | 61 | |
diff --git a/sage/tests/interrupt.pyx b/sage/tests/interrupt.pyx
a
|
b
|
|
698 | 698 | |
699 | 699 | try: |
700 | 700 | sig_on() |
| 701 | sig_block() |
| 702 | signal_after_delay(SIGINT, delay) |
| 703 | ms_sleep(delay * 2) # We get signaled during this sleep |
| 704 | v = 42 |
| 705 | sig_unblock() # Here, the interrupt will be handled |
| 706 | sig_off() |
701 | 707 | except KeyboardInterrupt: |
702 | 708 | return v |
703 | 709 | |
704 | | sig_block() |
705 | | signal_after_delay(SIGINT, delay) |
706 | | ms_sleep(delay * 2) # We get signaled during this sleep |
707 | | v = 42 |
708 | | sig_unblock() # Here, the interrupt will be handled |
709 | | return 1 # Never reached |
| 710 | # Never reached |
| 711 | return 1 |
710 | 712 | |
711 | 713 | def test_sig_block_outside_sig_on(long delay = DEFAULT_DELAY): |
712 | 714 | """ |