+ ds_init(&s);
+ ds_put_cstr(&s, "wakeup due to ");
+ if (pollfd) {
+ char *description = describe_fd(pollfd->fd);
+ if (pollfd->revents & POLLIN) {
+ ds_put_cstr(&s, "[POLLIN]");
+ }
+ if (pollfd->revents & POLLOUT) {
+ ds_put_cstr(&s, "[POLLOUT]");
+ }
+ if (pollfd->revents & POLLERR) {
+ ds_put_cstr(&s, "[POLLERR]");
+ }
+ if (pollfd->revents & POLLHUP) {
+ ds_put_cstr(&s, "[POLLHUP]");
+ }
+ if (pollfd->revents & POLLNVAL) {
+ ds_put_cstr(&s, "[POLLNVAL]");
+ }
+ ds_put_format(&s, " on fd %d (%s)", pollfd->fd, description);
+ free(description);
+ } else {
+ ds_put_format(&s, "%d-ms timeout", timeout);
+ }