Commit 4d9f776a authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Convert pointers to uintptr_t before sticking them in the pipe.

parent 1c406a22
...@@ -182,6 +182,7 @@ int ...@@ -182,6 +182,7 @@ int
Wait_Enter(const struct waiter *w, struct waited *wp) Wait_Enter(const struct waiter *w, struct waited *wp)
{ {
ssize_t written; ssize_t written;
uintptr_t up;
CHECK_OBJ_NOTNULL(w, WAITER_MAGIC); CHECK_OBJ_NOTNULL(w, WAITER_MAGIC);
CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC); CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC);
...@@ -193,10 +194,12 @@ Wait_Enter(const struct waiter *w, struct waited *wp) ...@@ -193,10 +194,12 @@ Wait_Enter(const struct waiter *w, struct waited *wp)
assert(w->pipes[1] > 0); assert(w->pipes[1] > 0);
written = write(w->pipes[1], &wp, sizeof wp); up = (uintptr_t)wp;
if (written != sizeof wp && (errno == EAGAIN || errno == EWOULDBLOCK)) AZ(up & 1);
written = write(w->pipes[1], &up, sizeof up);
if (written != sizeof up && (errno == EAGAIN || errno == EWOULDBLOCK))
return (-1); return (-1);
assert (written == sizeof wp); assert (written == sizeof up);
return (0); return (0);
} }
...@@ -220,7 +223,8 @@ wait_updidle(struct waiter *w, double now) ...@@ -220,7 +223,8 @@ wait_updidle(struct waiter *w, double now)
void void
Wait_Handle(struct waiter *w, struct waited *wp, enum wait_event ev, double now) Wait_Handle(struct waiter *w, struct waited *wp, enum wait_event ev, double now)
{ {
struct waited *ss[NEV], *wp2; uintptr_t ss[NEV];
struct waited *wp2;
int i, j, dotimer = 0; int i, j, dotimer = 0;
CHECK_OBJ_NOTNULL(w, WAITER_MAGIC); CHECK_OBJ_NOTNULL(w, WAITER_MAGIC);
...@@ -245,15 +249,17 @@ Wait_Handle(struct waiter *w, struct waited *wp, enum wait_event ev, double now) ...@@ -245,15 +249,17 @@ Wait_Handle(struct waiter *w, struct waited *wp, enum wait_event ev, double now)
return; return;
for (j = 0; i >= sizeof ss[0]; j++, i -= sizeof ss[0]) { for (j = 0; i >= sizeof ss[0]; j++, i -= sizeof ss[0]) {
CHECK_OBJ_ORNULL(ss[j], WAITED_MAGIC); if (ss[j] == 0) {
if (ss[j] == NULL) {
AN(w->dismantle); AN(w->dismantle);
} else if (ss[j] == w->pipe_w) { continue;
}
CAST_OBJ_NOTNULL(wp2, (void*)ss[j], WAITED_MAGIC);
if (wp2 == w->pipe_w) {
dotimer = 1; dotimer = 1;
} else { } else {
assert(ss[j]->fd >= 0); assert(wp2->fd >= 0);
VTAILQ_INSERT_TAIL(&w->waithead, ss[j], list); VTAILQ_INSERT_TAIL(&w->waithead, wp2, list);
w->impl->inject(w, ss[j]); w->impl->inject(w, wp2);
} }
} }
AZ(i); AZ(i);
......
...@@ -88,6 +88,7 @@ vwp_inject(const struct waiter *w, struct waited *wp) ...@@ -88,6 +88,7 @@ vwp_inject(const struct waiter *w, struct waited *wp)
CAST_OBJ_NOTNULL(vwp, w->priv, VWP_MAGIC); CAST_OBJ_NOTNULL(vwp, w->priv, VWP_MAGIC);
CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC); CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC);
fd = wp->fd; fd = wp->fd;
VSL(SLT_Debug, 0, "POLL Inject %d", fd);
assert(fd >= 0); assert(fd >= 0);
vwp_pollspace(vwp, (unsigned)fd); vwp_pollspace(vwp, (unsigned)fd);
assert(fd < vwp->npoll); assert(fd < vwp->npoll);
...@@ -111,6 +112,7 @@ vwp_evict(const struct waiter *w, struct waited *wp) ...@@ -111,6 +112,7 @@ vwp_evict(const struct waiter *w, struct waited *wp)
CAST_OBJ_NOTNULL(vwp, w->priv, VWP_MAGIC); CAST_OBJ_NOTNULL(vwp, w->priv, VWP_MAGIC);
CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC); CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC);
fd = wp->fd; fd = wp->fd;
VSL(SLT_Debug, 0, "POLL Evict %d", fd);
assert(fd >= 0); assert(fd >= 0);
assert(fd < vwp->npoll); assert(fd < vwp->npoll);
vwp_pollspace(vwp, (unsigned)fd); vwp_pollspace(vwp, (unsigned)fd);
...@@ -151,6 +153,7 @@ vwp_main(void *priv) ...@@ -151,6 +153,7 @@ vwp_main(void *priv)
break; break;
CHECK_OBJ_NOTNULL(sp, WAITED_MAGIC); CHECK_OBJ_NOTNULL(sp, WAITED_MAGIC);
fd = sp->fd; fd = sp->fd;
VSL(SLT_Debug, 0, "POLL Handle %d %x", fd, vwp->pollfd[fd].revents);
assert(fd >= 0); assert(fd >= 0);
assert(fd <= vwp->hpoll); assert(fd <= vwp->hpoll);
assert(fd < vwp->npoll); assert(fd < vwp->npoll);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment