-#define STATE_RUNNING (make_fixnum(0))
-#define STATE_STOPPING (make_fixnum(1))
-#define STATE_STOPPED (make_fixnum(2))
+#define STATE_RUNNING (make_fixnum(1))
+#define STATE_SUSPENDED (make_fixnum(2))
+#define STATE_DEAD (make_fixnum(3))
+
+#ifdef LISP_FEATURE_SB_THREAD
+
+/* Only access thread state with blockables blocked. */
+static inline lispobj
+thread_state(struct thread *thread)
+{
+ lispobj state;
+ pthread_mutex_lock(thread->state_lock);
+ state = thread->state;
+ pthread_mutex_unlock(thread->state_lock);
+ return state;
+}
+
+static inline void
+set_thread_state(struct thread *thread, lispobj state)
+{
+ pthread_mutex_lock(thread->state_lock);
+ thread->state = state;
+ pthread_cond_broadcast(thread->state_cond);
+ pthread_mutex_unlock(thread->state_lock);
+}
+
+static inline void
+wait_for_thread_state_change(struct thread *thread, lispobj state)
+{
+ pthread_mutex_lock(thread->state_lock);
+ while (thread->state == state)
+ pthread_cond_wait(thread->state_cond, thread->state_lock);
+ pthread_mutex_unlock(thread->state_lock);
+}
+
+extern pthread_key_t lisp_thread;
+#endif
+
+extern int kill_safely(os_thread_t os_thread, int signal);