Hello,
I tried to use the bug tracking system, but the "Report Issue" page
never go after the "Select Project" form. So I post this patch here.
The attached patch solve an issue I faced while using the libdbus-glib
waiting for a D-Bus message or the end of a glib timer at the same time.
This specific case of use generate a poll call with a zero timeout. On
platformes with the glibc a zero timeout poll return immetiately even if
there is no file descriptor event. But on platformes with uClibc a zero
timeout poll block until a file descriptor event occurs.
I found that the file libc/sysdeps/linux/common/poll.c only take care of
positive timeout and pass a null pointer in case of a zero or negative
timeout, making the zero and negative the same case: blocking.
The patch alway pass a valid structure for the timeout of poll and
assign acceptable timeout values for the zero and negative case by
avoiding the math needed for positive timeout value.
This has been tested on a Blackfin BF533 processor.
Have a good day,
--
Jean-Christian de Rivaz
Index: libc/sysdeps/linux/common/poll.c
===================================================================
--- libc/sysdeps/linux/common/poll.c (revision 20316)
+++ libc/sysdeps/linux/common/poll.c (working copy)
@@ -37,8 +37,14 @@
if (timeout > 0) {
tval.tv_sec = timeout / 1000;
tval.tv_nsec = (timeout % 1000) * 1000000;
- ts = &tval;
+ } else if (timeout == 0) {
+ tval.tv_sec = 0;
+ tval.tv_nsec = 0;
+ } else {
+ tval.tv_sec = -1;
+ tval.tv_nsec = 0;
}
+ ts = &tval;
return ppoll(fds, nfds, ts, NULL);
}
_______________________________________________
uClibc mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/uclibc