--=_courier-31909-1048228909-0001-2
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
> is there some deeper reason that there's no macro for waiting
> uninterruptablely with a timeout? Or did just nobody feel a need
> as yet?
Those macros seem to have moved out of <linux/sched.h> (2.4)
and wait_event_interruptible_timeout() was added about 6
months ago; the changelog entry says it was for smbfs.
So I'd guess "no need yet".
Here's an updated version of your patch, now using the same
calling convention that the other two "can return 'early'"
calls there provide. It's behaved in my testing, to replace the
chaos in the usb synchronous call wrappers.
- Dave
--=_courier-31909-1048228909-0001-2
Content-Type: text/plain; name="sched3.patch"; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="sched3.patch"
--- 1.7/include/linux/wait.h Sun Nov 17 12:30:14 2002
+++ edited/include/linux/wait.h Thu Mar 20 21:57:52 2003
@@ -173,6 +173,32 @@
__ret; \
})
+#define __wait_event_timeout(wq, condition, ret) \
+do { \
+ wait_queue_t __wait; \
+ init_waitqueue_entry(&__wait, current); \
+ \
+ add_wait_queue(&wq, &__wait); \
+ for (;;) { \
+ set_current_state(TASK_UNINTERRUPTIBLE); \
+ if (condition) \
+ break; \
+ ret = schedule_timeout(ret); \
+ if (!ret) \
+ break; \
+ } \
+ current->state = TASK_RUNNING; \
+ remove_wait_queue(&wq, &__wait); \
+} while (0)
+
+#define wait_event_timeout(wq, condition, timeout) \
+({ \
+ long __ret = timeout; \
+ if (!(condition)) \
+ __wait_event_timeout(wq, condition, __ret); \
+ __ret; \
+})
+
#define __wait_event_interruptible_timeout(wq, condition, ret) \
do { \
wait_queue_t __wait; \
--=_courier-31909-1048228909-0001-2--