* [PATCH] mini-os: select call incorrectly reports xce_handle as ready
@ 2008-07-23 17:01 Diego Ongaro
0 siblings, 0 replies; only message in thread
From: Diego Ongaro @ 2008-07-23 17:01 UTC (permalink / raw)
To: xen-devel
The current implementation in minios of xc_evtchn_pending doesn't set
read=0 when there is exactly one port pending. This resulted in select()
incorrectly reporting the file descriptor as ready.
Signed-off-by: Diego Ongaro <diego.ongaro@citrix.com>
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
---
diff --git a/tools/libxc/xc_minios.c b/tools/libxc/xc_minios.c
--- a/tools/libxc/xc_minios.c
+++ b/tools/libxc/xc_minios.c
@@ -287,22 +287,28 @@
evtchn_port_or_error_t xc_evtchn_pending(int xce_handle)
{
int i;
unsigned long flags;
+ evtchn_port_t ret = -1;
+
local_irq_save(flags);
+ files[xce_handle].read = 0;
for (i = 0; i < MAX_EVTCHN_PORTS; i++) {
- evtchn_port_t port = files[xce_handle].evtchn.ports[i].port;
- if (port != -1 && files[xce_handle].evtchn.ports[i].pending) {
- files[xce_handle].evtchn.ports[i].pending = 0;
- local_irq_restore(flags);
- return port;
- }
+ evtchn_port_t port = files[xce_handle].evtchn.ports[i].port;
+ if (port != -1 && files[xce_handle].evtchn.ports[i].pending) {
+ if (ret == -1) {
+ ret = port;
+ files[xce_handle].evtchn.ports[i].pending = 0;
+ } else {
+ files[xce_handle].read = 1;
+ break;
+ }
+ }
}
- files[xce_handle].read = 0;
local_irq_restore(flags);
- return -1;
+ return ret;
}
int xc_evtchn_unmask(int xce_handle, evtchn_port_t port)
{
unmask_evtchn(port);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-07-23 17:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-23 17:01 [PATCH] mini-os: select call incorrectly reports xce_handle as ready Diego Ongaro
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.