Thanks Gerhard, could you please create an issue in Jira? And please attach those Lua programs too. Thanks.
- mh On Wed, Apr 25, 2012 at 5:08 PM, Gerhard Lipp <gel...@googlemail.com> wrote: > i figured out to boil down an example, which shows this bug. > it consists of three files: > 1) x.lua doing the XREP XREQ stuff, must be started once > 2) rep.lua implementing a simple echo replier, must be started once > 3) req.lua making the request to rep.lua through x.lua. must be > started TWICE to produce the error. THIS PROCESS LOCKS. uncommenting > the ev.WRITE is a bad workaround to this issue. > > ----------- > -- x.lua: > ------------ > local zmq = require'zmq' > local ev = require'ev' > local c = zmq.init(1) > local xreq = c:socket(zmq.XREQ) > xreq:bind('tcp://127.0.0.1:13333') > local xrep = c:socket(zmq.XREP) > xrep:bind('tcp://127.0.0.1:13334') > local forward_io = > function(src,dst) > return ev.IO.new( > function(loop,io) > while true do > local events = src:getopt(zmq.EVENTS) > if events == zmq.POLLIN or events == (zmq.POLLIN + > zmq.POLLOUT) then > local more > repeat > local data = src:recv() > local more = src:getopt(zmq.RCVMORE) > 0 > dst:send(data,more and zmq.SNDMORE or 0) > until not more > else > break > end > end > end, > src:getopt(zmq.FD), > ev.READ -- + ev.WRITE -- "fixes" the problem > ) > end > local xrep_io = forward_io(xrep,xreq) > local xreq_io = forward_io(xreq,xrep) > xreq_io:start(ev.Loop.default) > xrep_io:start(ev.Loop.default) > ev.Loop.default:loop() > > --------- > -- req.lua > ---------- > local zmq = require'zmq' > local c = zmq.init(1) > local req = c:socket(zmq.REQ) > req:connect('tcp://127.0.0.1:13334') > while true do > local r = tostring(math.random(1,10000000)) > req:send(r) > local x = req:recv() > print(x,r) > assert(x==r) > end > > --------- > -- rep.lua > ------------ > local zmq = require'zmq' > local c = zmq.init(1) > local rep = c:socket(zmq.REP) > rep:connect('tcp://127.0.0.1:13333') > while true do > local x = rep:recv() > rep:send(x) > end > > > > On Mon, Apr 23, 2012 at 2:53 PM, Gerhard Lipp <gel...@googlemail.com> wrote: >> Hello, >> >> I can observe the same behavior as stated here >> (http://lists.zeromq.org/pipermail/zeromq-dev/2011-November/014615.html). >> What I observe is also a XREP/XREQ (ROUTER/DEALER) prob, where the >> XREQ is waiting forever to receive a message (which has been >> definitely sent). When I poll (timer based) the ZMQ_EVENTs, the XREQ >> is readable as expected. I am using libev (select based) for doing IO >> and I am aware of the edge-based trigger behaviour (I am >> reading/forwarding messages until ZMQ_EVENTs does not include the >> ZMQ_POLLIN bit any more). >> >> What is the status of this issue? >> Unfortunately my setup is a bit complicated to share, but i would like >> to help as much as possible. >> >> Regards, >> Gerhard >> >> A libev workaround is to use both EV_READ and EV_WRITE bits, though >> this adds a lot of unnecessary wake ups / callbacks etc. > _______________________________________________ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev _______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev