aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.c
diff options
context:
space:
mode:
authorTom Tromey2012-08-15 13:03:17 -0600
committerTom Tromey2012-08-15 13:03:17 -0600
commit14b3dc5e4f2cdefde1ba04ddd3525115e7ca7dce (patch)
treeaf04882e838fea858d9672dac6c19eab374505b9 /src/thread.c
parent2d525b793f1b0fd2b6f66881310bec8684bceffe (diff)
downloademacs-14b3dc5e4f2cdefde1ba04ddd3525115e7ca7dce.tar.gz
emacs-14b3dc5e4f2cdefde1ba04ddd3525115e7ca7dce.zip
This introduces the low-level system threading support. It also adds
the global lock. The low-level support is a bit over-eager, in that even at the end of the present series, it will not all be used. I think thiat is ok since I plan to use it all eventually -- in particular for the emacs lisp mutex implementation. I've only implemented the pthreads-based version. I think it should be relatively clear how to port this to other systems, though. I'd also like to do a "no threads" port that will turn most things into no-ops, and have thread-creation fail. I was thinking perhaps I'd make a future (provide 'threads) conditional on threads actually working. One other minor enhancement available here is to make it possible to set the name of the new thread at the OS layer. That way gdb, e.g., could display thread names.
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/thread.c b/src/thread.c
index ba2d66320fa..19faa1bafae 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -27,6 +27,8 @@ struct thread_state *current_thread = &the_only_thread;
27 27
28struct thread_state *all_threads = &the_only_thread; 28struct thread_state *all_threads = &the_only_thread;
29 29
30sys_mutex_t global_lock;
31
30static void 32static void
31mark_one_thread (struct thread_state *thread) 33mark_one_thread (struct thread_state *thread)
32{ 34{
@@ -103,3 +105,10 @@ unmark_threads (void)
103 if (iter->m_byte_stack_list) 105 if (iter->m_byte_stack_list)
104 unmark_byte_stack (iter->m_byte_stack_list); 106 unmark_byte_stack (iter->m_byte_stack_list);
105} 107}
108
109void
110init_threads (void)
111{
112 sys_mutex_init (&global_lock);
113 sys_mutex_lock (&global_lock);
114}