Commit graph

5171 commits

Author SHA1 Message Date
Juan Jose Garcia Ripoll
3980ea5d66 Removed the process.active field and instead used 'process.phase'. Added some debug statements. Threads are launched also with POSIX signals disabled (at least ECL's signal). 2012-04-06 18:07:58 +02:00
Juan Jose Garcia Ripoll
d0abeffcdd DIRECTORY does not complain about non-existent directory components 2012-04-06 18:04:00 +02:00
Juan Jose Garcia Ripoll
56d53420a9 In external-process-wait, spin to ensure that a structure was already updated by the concurrent thread. 2012-04-06 12:37:29 +02:00
Juan Jose Garcia Ripoll
d771c29fcf MP:PROCESS-JOIN now works with an exit barrier that is set up for each process. 2012-04-06 12:08:47 +02:00
Juan Jose Garcia Ripoll
d161ac43f9 wakeup_one() did not use the spinlocks and had some additional implementation errors. 2012-04-06 12:08:47 +02:00
Juan Jose Garcia Ripoll
9ee80d0396 Sometimes the environment of a process might be NULL -- in that case, avoid marking. 2012-04-06 11:47:58 +02:00
Juan Jose Garcia Ripoll
42459677a0 mp:barrier-wait was missing the condition for disabled barriers 2012-04-06 11:24:27 +02:00
Juan Jose Garcia Ripoll
a5eb54dd27 Implemented mp:barrier and fixed unixsys.d to use spinlocks and not real locks. 2012-04-06 00:18:29 +02:00
Juan Jose Garcia Ripoll
7d97d8c817 Define ecl_process_yield() 2012-04-05 10:24:53 +02:00
Juan Jose Garcia Ripoll
44fbe27453 List new thread files in emacs.el 2012-04-05 01:11:03 +02:00
Juan Jose Garcia Ripoll
0221323a84 Change special handling of interrupt signal in asynchronous_signal_servicing_thread() 2012-04-05 01:11:03 +02:00
Juan Jose Garcia Ripoll
e192df6069 Fixed order of arguments to pthread_sigmask() 2012-04-05 01:08:39 +02:00
Juanjo Garcia-Ripoll
1683fe140d Removed wrong comment 2012-04-02 17:28:33 +02:00
Juanjo Garcia-Ripoll
0fecb887e0 Implemented semaphores using atomic operations 2012-04-02 17:12:50 +02:00
Juan Jose Garcia Ripoll
e607b5c7f8 Fixed a typo in queue.d 2012-04-01 12:32:44 +02:00
Juan Jose Garcia Ripoll
b45695b642 Remove change that slipped from previous debugging sessions. 2012-03-31 11:30:06 +02:00
Juan Jose Garcia Ripoll
1de1d7e428 ecl_wait_on() takes the environment as an argument 2012-03-31 11:25:56 +02:00
Juan Jose Garcia Ripoll
667362a485 mp_get_lock_wait() checks the type of the lock before dereferencing a field. 2012-03-31 11:22:23 +02:00
Juan Jose Garcia Ripoll
e278e1d5a7 When the lock is interrupted, we have to ensure that some thread is woken up. 2012-03-31 11:17:27 +02:00
Juan Jose Garcia Ripoll
108dffc08e Moved some comments 2012-03-31 11:17:08 +02:00
Juan Jose Garcia Ripoll
57b24d5807 The main process was not marked as ctive. 2012-03-31 11:16:10 +02:00
Juan Jose Garcia Ripoll
008a260e1f In ecl_wait_on(), take care of the situation in which we abort waiting but do not care to acquire the lock: the other waiters must then be awoken. 2012-03-31 10:54:01 +02:00
Juan Jose Garcia Ripoll
e614f54a10 Resucitate the ecl_wait_on() implementation based on nanosleep(). 2012-03-29 22:45:58 +02:00
Juan Jose Garcia Ripoll
a5d1a4fdad Only block the process communication thread 2012-03-29 22:25:28 +02:00
Juan Jose Garcia Ripoll
1a9789f271 Directly access the option values array and only block the process interrupt in ecl_wait_on(). 2012-03-29 22:11:29 +02:00
Juan Jose Garcia Ripoll
c4023263f0 Fixed small typo. 2012-03-29 20:25:28 +02:00
Juan Jose Garcia Ripoll
0b013aeaa4 Remove install_process_interupt_handler(), which is after all a synchronous signal handler 2012-03-29 20:23:14 +02:00
Juan Jose Garcia Ripoll
2d0f9bd1ed Split the process interrupt handler from others, to speed it up a bit. 2012-03-29 20:15:05 +02:00
Juan Jose Garcia Ripoll
616bcfcf0c Move the definition of sched_yield() up for scope reasons. 2012-03-29 19:34:12 +02:00
Juan Jose Garcia Ripoll
fc62d7927f Eliminated all of the remnants from the ecl_atomic_queue interface 2012-03-29 18:57:31 +02:00
Juan Jose Garcia Ripoll
a0252e9509 Remove debug statement 2012-03-29 18:51:08 +02:00
Juan Jose Garcia Ripoll
328ac68f83 No need to create an extra cons for the wait queue 2012-03-29 18:50:58 +02:00
Juan Jose Garcia Ripoll
72fb2b575c Use the spinlock in the queue object and not in the cons 2012-03-29 18:33:58 +02:00
Juan Jose Garcia Ripoll
47b906b18f Do not pass the wait queue cons object around 2012-03-29 18:18:38 +02:00
Juan Jose Garcia Ripoll
5b1007c787 Change field names and introduce the spinlock in the lock structure 2012-03-29 17:43:27 +02:00
Juan Jose Garcia Ripoll
658d1c53ab Removed unused code and refactored all the queue code into queueu.d 2012-03-29 17:37:35 +02:00
Juan Jose Garcia Ripoll
9331ec4ac5 Condition variables must _always_ wake up somebody. 2012-03-29 16:47:55 +02:00
Juan Jose Garcia Ripoll
4cf99dce0b Reuse the cons that is used for adding a process to a wait queue. 2012-03-29 15:25:59 +02:00
Juan Jose Garcia Ripoll
b9cebb0cf7 print_lock() is now more like printf(). New implementation of the queue. 2012-03-29 12:45:22 +02:00
Juan Jose Garcia Ripoll
4bbeaa8f6e Handle SIGILL. 2012-03-29 12:43:50 +02:00
Juan Jose Garcia Ripoll
76de423dcd Remove debug statements 2012-03-28 21:53:48 +02:00
Juan Jose Garcia Ripoll
a5661d8ad5 Do not try the atomic lock operation if there are processes waiting. 2012-03-27 22:55:02 +02:00
Juan Jose Garcia Ripoll
e0a8c7b568 Check whether sched_yield() is available. 2012-03-27 22:53:58 +02:00
Juan Jose Garcia Ripoll
9ed7234c54 Debug wait queue 2012-03-23 23:23:53 +01:00
Juan Jose Garcia Ripoll
ad3b5ce069 Export spinlocks in internal.h 2012-03-23 22:30:19 +01:00
Juanjo Garcia-Ripoll
d0e9b4cd47 While a thread is booting: i) signals are ignored, ii) mp_process_join() and mp_process_kill() wait. 2012-03-20 17:46:31 +01:00
Juan Jose Garcia Ripoll
cacf1be931 mp_process_kill() and mp_process_join() now check whether the process is alive. 2012-03-20 00:02:51 +01:00
Juan Jose Garcia Ripoll
d54cbaa749 ecl_check_pending_interrupts() now takes the environment as argument
To wake up a process we need not supply any function (it is faster as it saves a call to queue_signal()
2012-03-20 00:02:47 +01:00
Juan Jose Garcia Ripoll
b10c0c1acf Interrupts will be discarded for exiting processes (avoids a harmful process kill signal when trying to clean up) 2012-03-19 23:59:58 +01:00
Juan Jose Garcia Ripoll
a444e8d290 When giving up a lock there is no need to disable interrupts. 2012-03-19 23:59:16 +01:00