aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/thread.c b/src/thread.c
index 39a21518ec6..f060a002a3a 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -55,15 +55,20 @@ static void
55post_acquire_global_lock (struct thread_state *self) 55post_acquire_global_lock (struct thread_state *self)
56{ 56{
57 Lisp_Object buffer; 57 Lisp_Object buffer;
58 struct thread_state *prev_thread = current_thread;
58 59
59 if (self != current_thread) 60 /* Do this early on, so that code below could signal errors (e.g.,
61 unbind_for_thread_switch might) correctly, because we are already
62 running in the context of the thread pointed by SELF. */
63 current_thread = self;
64
65 if (prev_thread != current_thread)
60 { 66 {
61 /* CURRENT_THREAD is NULL if the previously current thread 67 /* PREV_THREAD is NULL if the previously current thread
62 exited. In this case, there is no reason to unbind, and 68 exited. In this case, there is no reason to unbind, and
63 trying will crash. */ 69 trying will crash. */
64 if (current_thread != NULL) 70 if (prev_thread != NULL)
65 unbind_for_thread_switch (); 71 unbind_for_thread_switch (prev_thread);
66 current_thread = self;
67 rebind_for_thread_switch (); 72 rebind_for_thread_switch ();
68 } 73 }
69 74