From ba8b85fc22d0331b43ebc0e92b2deb7819a0c2c3 Mon Sep 17 00:00:00 2001 From: Marius Gerbershagen Date: Sun, 14 Jan 2018 20:26:15 +0100 Subject: [PATCH] make sure interrupts are enabled again after having been disabled This is important to prevent race conditions. If interrupts are left disabled, the environment may be wrongly write protected by an interrupting thread and completely harmless writes in the environment can lead to segmentation faults. --- src/c/threads/queue.d | 1 + src/c/unixfsys.d | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/c/threads/queue.d b/src/c/threads/queue.d index 2c41e4d2f..fcd815a62 100755 --- a/src/c/threads/queue.d +++ b/src/c/threads/queue.d @@ -358,6 +358,7 @@ ecl_wakeup_waiters(cl_env_ptr the_env, cl_object q, int flags) } } ecl_giveup_spinlock(&q->queue.spinlock); + ecl_enable_interrupts_env(the_env); ecl_process_yield(); } diff --git a/src/c/unixfsys.d b/src/c/unixfsys.d index 1f09835fe..731eb9c2d 100644 --- a/src/c/unixfsys.d +++ b/src/c/unixfsys.d @@ -834,8 +834,8 @@ list_directory(cl_object base_dir, cl_object text_mask, cl_object pathname_mask, # endif /* !ECL_MS_WINDOWS_HOST */ #endif /* !HAVE_DIRENT_H */ - ecl_enable_interrupts(); OUTPUT: + ecl_enable_interrupts(); return cl_nreverse(out); }