{MP_ "INTERRUPT-PROCESS", MP_ORDINARY, IF_MP(mp_interrupt_process), 2, OBJNULL},
{MP_ "+LOAD-COMPILE-LOCK+", MP_CONSTANT, NULL, -1, OBJNULL},
{MP_ "WITH-LOCK", MP_CONSTANT, NULL, -1, OBJNULL},
+{MP_ "WITH-RWLOCK", MP_CONSTANT, NULL, -1, OBJNULL},
{MP_ "BLOCK-SIGNALS", MP_ORDINARY, IF_MP(mp_block_signals), 0, OBJNULL},
{MP_ "RESTORE-SIGNALS", MP_ORDINARY, IF_MP(mp_restore_signals), 1, OBJNULL},
{MP_ "PROCESS-SUSPEND", MP_ORDINARY, IF_MP(mp_process_suspend), 1, OBJNULL},
{MP_ "INTERRUPT-PROCESS",IF_MP("mp_interrupt_process")},
{MP_ "+LOAD-COMPILE-LOCK+",NULL},
{MP_ "WITH-LOCK",NULL},
+{MP_ "WITH-LOCK",NULL},
{MP_ "BLOCK-SIGNALS",IF_MP("mp_block_signals")},
{MP_ "RESTORE-SIGNALS",IF_MP("mp_restore_signals")},
{MP_ "PROCESS-SUSPEND",IF_MP("mp_process_suspend")},
(> (the fixnum (mp:lock-count ,lock))
(the fixnum ,count))))
(mp::giveup-lock ,lock))))))))
+
+#+ecl-read-write-lock
+(defmacro with-rwlock ((lock op) &body body)
+ (assert (member op '(:read :write) :test #'eq))
+ (let ((s-lock (gensym)))
+ `(let ((,s-lock ,lock))
+ (,(if (eq :read op)
+ 'mp:get-rwlock-read
+ 'mp:get-rwlock-write) ,s-lock t)
+ (unwind-protect
+ (progn
+ ,@body)
+ (,(if (eq :read op)
+ 'mp:giveup-rwlock-read
+ 'mp:giveup-rwlock-write) ,s-lock)))))
(defmacro with-lock ((lock) &body body)
`(progn ,@body))
+#-ecl-read-write-lock
+(defmacro with-rwlock ((lock op) &body body)
+ `(progn ,@body))
+
(defun safe-system (string)
(cmpnote "Invoking external command:~% ~A" string)
(let ((result (si:system string)))