Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision 2f7d77c6250db2dbaf4fc40c073fd148af44fd39)
+++ kernel/generic/include/proc/thread.h	(revision b59318e5ac29b0f8d47f0b4407a9f99be6ad5654)
@@ -112,4 +112,12 @@
 	/** If true, the thread can be interrupted from sleep. */
 	bool sleep_interruptible;
+
+	/**
+	 * If true, and this thread's sleep returns without a wakeup
+	 * (timed out or interrupted), waitq ignores the next wakeup.
+	 * This is necessary for futex to be able to handle those conditions.
+	 */
+	bool sleep_composable;
+
 	/** Wait queue in which this thread sleeps. */
 	waitq_t *sleep_queue;
Index: kernel/generic/include/synch/futex.h
===================================================================
--- kernel/generic/include/synch/futex.h	(revision 2f7d77c6250db2dbaf4fc40c073fd148af44fd39)
+++ kernel/generic/include/synch/futex.h	(revision b59318e5ac29b0f8d47f0b4407a9f99be6ad5654)
@@ -53,5 +53,5 @@
 
 extern void futex_init(void);
-extern sys_errno_t sys_futex_sleep(uintptr_t);
+extern sys_errno_t sys_futex_sleep(uintptr_t, uintptr_t);
 extern sys_errno_t sys_futex_wakeup(uintptr_t);
 
Index: kernel/generic/include/synch/waitq.h
===================================================================
--- kernel/generic/include/synch/waitq.h	(revision 2f7d77c6250db2dbaf4fc40c073fd148af44fd39)
+++ kernel/generic/include/synch/waitq.h	(revision b59318e5ac29b0f8d47f0b4407a9f99be6ad5654)
@@ -62,4 +62,7 @@
 	int missed_wakeups;
 
+	/** Number of wakeups that need to be ignored due to futex timeout. */
+	int ignore_wakeups;
+
 	/** List of sleeping threads for which there was no missed_wakeup. */
 	list_t sleepers;
