Fix bug in poller.

zmq3.0
Robert G. Jakabosky 15 years ago
parent 23db47708b
commit c5fc85c9cd

@ -455,7 +455,7 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
]], ]],
}, },
method "next_revents_idx" { method "next_revents_idx" {
c_method_call { "int", "idx>1" } "poller_poll_next_revents" { "int", "&revents>2" }, c_method_call { "int", "idx>1" } "poller_next_revents" { "int", "&revents>2" },
}, },
method "count" { method "count" {
var_out{ "int", "count" }, var_out{ "int", "count" },

@ -1214,7 +1214,7 @@ static const char zmq_ffi_lua_code[] = "local ffi=require\"ffi\"\n"
"\n" "\n"
"void poller_cleanup(ZMQ_Poller *);\n" "void poller_cleanup(ZMQ_Poller *);\n"
"\n" "\n"
"int poller_poll_next_revents(ZMQ_Poller *, int*);\n" "int poller_next_revents(ZMQ_Poller *, int*);\n"
"\n" "\n"
"ZMQ_Error zmq_term(ZMQ_Ctx *);\n" "ZMQ_Error zmq_term(ZMQ_Ctx *);\n"
"\n" "\n"
@ -2018,19 +2018,7 @@ static const char zmq_ffi_lua_code[] = "local ffi=require\"ffi\"\n"
" \n" " \n"
" local idx1\n" " local idx1\n"
" local revents2 = next_revents_idx_revents_tmp\n" " local revents2 = next_revents_idx_revents_tmp\n"
" idx1 = C.poller_poll_next_revents(self, revents2)\n" " idx1 = C.poller_next_revents(self, revents2)\n"
" idx1 = idx1\n"
" revents2 = revents2\n"
"[0] return idx1, revents2\n"
"end\n"
"\n"
" local poll_next_revents_idx_revents_tmp = ffi.new(\"int[1]\")\n"
"-- method: poll_next_revents_idx\n"
"function _meth.ZMQ_Poller.poll_next_revents_idx(self)\n"
" \n"
" local idx1\n"
" local revents2 = poll_next_revents_idx_revents_tmp\n"
" idx1 = C.poller_poll_next_revents(self, revents2)\n"
" idx1 = idx1\n" " idx1 = idx1\n"
" revents2 = revents2\n" " revents2 = revents2\n"
"[0] return idx1, revents2\n" "[0] return idx1, revents2\n"
@ -2514,44 +2502,6 @@ int poller_next_revents(ZMQ_Poller *poller, int *revents) {
return -1; return -1;
} }
int poller_poll_next_revents(ZMQ_Poller *poller, int *revents) {
zmq_pollitem_t *items;
int count;
int idx;
int next;
idx = poller->next;
items = poller->items;
/* do we need to poll for more events? */
if(idx < 0) {
goto need_poll;
}
get_event:
count = poller->count;
/* find next item with pending events. */
for(;idx < count; ++idx) {
/* did we find a pending event? */
if(items[idx].revents != 0) {
*revents = items[idx].revents;
next = idx+1;
poller->next = (next < count) ? next : -1;
return idx;
}
}
/* processed all pending events. */
poller->next = -1;
*revents = 0;
return -1;
need_poll:
count = poller_poll(poller, -1);
if(count > 0) {
idx = 0;
goto get_event;
}
return count;
}
typedef struct ZMQ_Ctx ZMQ_Ctx; typedef struct ZMQ_Ctx ZMQ_Ctx;
@ -3309,18 +3259,7 @@ static int ZMQ_Poller__next_revents_idx__meth(lua_State *L) {
ZMQ_Poller * this1 = obj_type_ZMQ_Poller_check(L,1); ZMQ_Poller * this1 = obj_type_ZMQ_Poller_check(L,1);
int idx1 = 0; int idx1 = 0;
int revents2 = 0; int revents2 = 0;
idx1 = poller_poll_next_revents(this1, &(revents2)); idx1 = poller_next_revents(this1, &(revents2));
lua_pushinteger(L, idx1);
lua_pushinteger(L, revents2);
return 2;
}
/* method: poll_next_revents_idx */
static int ZMQ_Poller__poll_next_revents_idx__meth(lua_State *L) {
ZMQ_Poller * this1 = obj_type_ZMQ_Poller_check(L,1);
int idx1 = 0;
int revents2 = 0;
idx1 = poller_poll_next_revents(this1, &(revents2));
lua_pushinteger(L, idx1); lua_pushinteger(L, idx1);
lua_pushinteger(L, revents2); lua_pushinteger(L, revents2);
return 2; return 2;
@ -4009,7 +3948,6 @@ static const luaL_reg obj_ZMQ_Poller_methods[] = {
{"remove", ZMQ_Poller__remove__meth}, {"remove", ZMQ_Poller__remove__meth},
{"poll", ZMQ_Poller__poll__meth}, {"poll", ZMQ_Poller__poll__meth},
{"next_revents_idx", ZMQ_Poller__next_revents_idx__meth}, {"next_revents_idx", ZMQ_Poller__next_revents_idx__meth},
{"poll_next_revents_idx", ZMQ_Poller__poll_next_revents_idx__meth},
{"count", ZMQ_Poller__count__meth}, {"count", ZMQ_Poller__count__meth},
{NULL, NULL} {NULL, NULL}
}; };

Loading…
Cancel
Save