diff --git a/src/libei-event.c b/src/libei-event.c index 9de45de..856ae03 100644 --- a/src/libei-event.c +++ b/src/libei-event.c @@ -102,6 +102,7 @@ ei_event_destroy(struct ei_event *event) ei_ping_unref(event->pong.ping); break; case EI_EVENT_SYNC: + ei_sync_event_send_done(event); ei_pingpong_unref(event->sync.pingpong); break; } diff --git a/src/libei-private.h b/src/libei-private.h index af83a93..9fec25b 100644 --- a/src/libei-private.h +++ b/src/libei-private.h @@ -243,6 +243,8 @@ ei_queue_touch_up_event(struct ei_device *device, uint32_t touchid); void ei_queue_touch_cancel_event(struct ei_device *device, uint32_t touchid); +void +ei_sync_event_send_done(struct ei_event *e); _printf_(6, 7) void ei_log_msg(struct ei *ei, diff --git a/src/libei.c b/src/libei.c index ed4037c..a59bbf7 100644 --- a/src/libei.c +++ b/src/libei.c @@ -336,6 +336,19 @@ ei_queue_pong_event(struct ei *ei, struct ei_ping *ping) queue_event(ei, e); } +void +ei_sync_event_send_done(struct ei_event *e) +{ + struct ei *ei = ei_event_get_context(e); + _unref_(ei_pingpong) *pp = steal(&e->sync.pingpong); + log_debug(ei_event_get_context(e), + "object %#" PRIx64 ": ping pong done", + ei_pingpong_get_id(pp)); + + if (ei->state < EI_STATE_DISCONNECTED) + ei_pingpong_request_done(pp, 0); +} + void ei_queue_sync_event(struct ei *ei, struct ei_pingpong *ping) { @@ -693,16 +706,6 @@ ei_get_event(struct ei *ei) struct ei_event *e = list_first_entry(&ei->event_queue, e, link); list_remove(&e->link); - if (e->type == EI_EVENT_SYNC) { - _unref_(ei_pingpong) *pp = steal(&e->sync.pingpong); - log_debug(ei_event_get_context(e), - "object %#" PRIx64 ": ping pong done", - ei_pingpong_get_id(pp)); - - if (ei->state < EI_STATE_DISCONNECTED) - ei_pingpong_request_done(pp, 0); - } - return e; }