diff options
author | Linus Nordberg <linus@nordu.net> | 2011-03-10 08:08:32 +0100 |
---|---|---|
committer | Linus Nordberg <linus@nordu.net> | 2011-03-10 08:08:32 +0100 |
commit | 1a1e09bd5def4fae2a499294535b37805f79fde8 (patch) | |
tree | 3726fe2e84485d405a9d09500b0215da933d1b47 /lib | |
parent | a48992622d54c6d5dbf5abe3022cfe5b06167261 (diff) |
[UDP] Don't crash on second packet.
[UDP] Set the user_data member for the write callback in
rs_packet_send() -- the one from udp_init() doesn't do much good at
this point.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/send.c | 2 | ||||
-rw-r--r-- | lib/udp.c | 3 |
2 files changed, 4 insertions, 1 deletions
@@ -103,6 +103,8 @@ rs_packet_send (struct rs_packet *pkt, void *user_data) } else /* UDP */ { + event_assign (conn->wev, conn->evb, event_get_fd (conn->wev), + EV_WRITE, event_get_callback (conn->wev), pkt); err = event_add (conn->wev, NULL); if (err < 0) return rs_err_conn_push_fl (conn, RSE_EVENT, __FILE__, __LINE__, @@ -128,6 +128,7 @@ _evcb (evutil_socket_t fd, short what, void *user_data) { struct rs_packet *pkt = (struct rs_packet *) user_data; assert (pkt); + assert (pkt->conn); if (!pkt->conn->is_connected) event_on_connect (pkt->conn, pkt); @@ -150,7 +151,7 @@ udp_init (struct rs_connection *conn, struct rs_packet *pkt) assert (!conn->bev); conn->rev = event_new (conn->evb, conn->fd, EV_READ|EV_PERSIST, _evcb, NULL); - conn->wev = event_new (conn->evb, conn->fd, EV_WRITE, _evcb, pkt); + conn->wev = event_new (conn->evb, conn->fd, EV_WRITE, _evcb, NULL); if (!conn->rev || !conn->wev) { if (conn->rev) |