mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 18:20:15 +00:00
Merge pull request #8304 from mjstapp/fix_zmq_xref
lib: fix use of xrefs in zmq wrapper
This commit is contained in:
commit
465d4a6c5b
@ -135,8 +135,8 @@ static int frrzmq_read_msg(struct thread *t)
|
|||||||
if (read)
|
if (read)
|
||||||
frrzmq_check_events(cbp, &cb->write, ZMQ_POLLOUT);
|
frrzmq_check_events(cbp, &cb->write, ZMQ_POLLOUT);
|
||||||
|
|
||||||
_thread_add_read_write(t->xref, t->master, frrzmq_read_msg, cbp,
|
thread_add_read(t->master, frrzmq_read_msg, cbp,
|
||||||
cb->fd, &cb->read.thread);
|
cb->fd, &cb->read.thread);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
@ -191,11 +191,11 @@ int _frrzmq_thread_add_read(const struct xref_threadsched *xref,
|
|||||||
if (events & ZMQ_POLLIN) {
|
if (events & ZMQ_POLLIN) {
|
||||||
thread_cancel(&cb->read.thread);
|
thread_cancel(&cb->read.thread);
|
||||||
|
|
||||||
_thread_add_event(xref, master, frrzmq_read_msg, cbp, fd,
|
thread_add_event(master, frrzmq_read_msg, cbp, fd,
|
||||||
&cb->read.thread);
|
&cb->read.thread);
|
||||||
} else
|
} else
|
||||||
_thread_add_read_write(xref, master, frrzmq_read_msg, cbp, fd,
|
thread_add_read(master, frrzmq_read_msg, cbp, fd,
|
||||||
&cb->read.thread);
|
&cb->read.thread);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,8 +241,8 @@ static int frrzmq_write_msg(struct thread *t)
|
|||||||
if (written)
|
if (written)
|
||||||
frrzmq_check_events(cbp, &cb->read, ZMQ_POLLIN);
|
frrzmq_check_events(cbp, &cb->read, ZMQ_POLLIN);
|
||||||
|
|
||||||
_thread_add_read_write(t->xref, t->master, frrzmq_write_msg, cbp,
|
thread_add_write(t->master, frrzmq_write_msg, cbp,
|
||||||
cb->fd, &cb->write.thread);
|
cb->fd, &cb->write.thread);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
@ -297,8 +297,8 @@ int _frrzmq_thread_add_write(const struct xref_threadsched *xref,
|
|||||||
_thread_add_event(xref, master, frrzmq_write_msg, cbp, fd,
|
_thread_add_event(xref, master, frrzmq_write_msg, cbp, fd,
|
||||||
&cb->write.thread);
|
&cb->write.thread);
|
||||||
} else
|
} else
|
||||||
_thread_add_read_write(xref, master, frrzmq_write_msg, cbp, fd,
|
thread_add_write(master, frrzmq_write_msg, cbp, fd,
|
||||||
&cb->write.thread);
|
&cb->write.thread);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ void frrzmq_thread_cancel(struct frrzmq_cb **cb, struct cb_core *core)
|
|||||||
thread_cancel(&core->thread);
|
thread_cancel(&core->thread);
|
||||||
|
|
||||||
if ((*cb)->read.cancelled && !(*cb)->read.thread
|
if ((*cb)->read.cancelled && !(*cb)->read.thread
|
||||||
&& (*cb)->write.cancelled && (*cb)->write.thread)
|
&& (*cb)->write.cancelled && !(*cb)->write.thread)
|
||||||
XFREE(MTYPE_ZEROMQ_CB, *cb);
|
XFREE(MTYPE_ZEROMQ_CB, *cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,12 +330,16 @@ void frrzmq_check_events(struct frrzmq_cb **cbp, struct cb_core *core,
|
|||||||
len = sizeof(events);
|
len = sizeof(events);
|
||||||
if (zmq_getsockopt(cb->zmqsock, ZMQ_EVENTS, &events, &len))
|
if (zmq_getsockopt(cb->zmqsock, ZMQ_EVENTS, &events, &len))
|
||||||
return;
|
return;
|
||||||
if (events & event && core->thread && !core->cancelled) {
|
if ((events & event) && core->thread && !core->cancelled) {
|
||||||
struct thread_master *tm = core->thread->master;
|
struct thread_master *tm = core->thread->master;
|
||||||
|
|
||||||
thread_cancel(&core->thread);
|
thread_cancel(&core->thread);
|
||||||
|
|
||||||
thread_add_event(tm, (event == ZMQ_POLLIN ? frrzmq_read_msg
|
if (event == ZMQ_POLLIN)
|
||||||
: frrzmq_write_msg),
|
thread_add_event(tm, frrzmq_read_msg,
|
||||||
cbp, cb->fd, &core->thread);
|
cbp, cb->fd, &core->thread);
|
||||||
|
else
|
||||||
|
thread_add_event(tm, frrzmq_write_msg,
|
||||||
|
cbp, cb->fd, &core->thread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user