Browse Source

remove pending events buffer again as this was the wrong way

1.0.0
Georg Hopp 11 years ago
parent
commit
f129e7f180
  1. 3
      include/tr/event_dispatcher.h
  2. 2
      src/event_dispatcher.c
  3. 12
      src/event_dispatcher_start.c

3
include/tr/event_dispatcher.h

@ -48,7 +48,6 @@ TR_CLASS(TR_EventDispatcher) {
TR_EXTENDS(TR_EventSubject); TR_EXTENDS(TR_EventSubject);
TR_Queue events; TR_Queue events;
TR_Queue pending;
TR_Hash handler; TR_Hash handler;
TR_EventHandler default_handler; TR_EventHandler default_handler;
int running; int running;
@ -76,8 +75,6 @@ void TR_eventDispatcherShutdown(TR_EventDispatcher);
#define TR_eventDispatcherEnqueueEvent(disp,ev) \ #define TR_eventDispatcherEnqueueEvent(disp,ev) \
(TR_queuePut((disp)->events, (ev))) (TR_queuePut((disp)->events, (ev)))
#define TR_eventDispatcherEnqueuePending(disp,ev) \
(TR_queuePut((disp)->pending, (ev)))
#define TR_eventDispatcherStop(disp) \ #define TR_eventDispatcherStop(disp) \
(((TR_EventDispatcher)disp)->running = 0) (((TR_EventDispatcher)disp)->running = 0)

2
src/event_dispatcher.c

@ -66,7 +66,6 @@ eventDispatcherCtor(void * _this, va_list * params) {
TR_EventDispatcher this = _this; TR_EventDispatcher this = _this;
this->events = TR_new(TR_Queue); this->events = TR_new(TR_Queue);
this->pending = TR_new(TR_Queue);
this->handler = TR_new(TR_Hash); this->handler = TR_new(TR_Hash);
this->mode = va_arg(*params, TR_EventDispatcherMode); this->mode = va_arg(*params, TR_EventDispatcherMode);
this->default_handler = va_arg(*params, TR_EventHandler); this->default_handler = va_arg(*params, TR_EventHandler);
@ -98,7 +97,6 @@ eventDispatcherDtor(void * _this) {
TR_hashCleanup(this->handler); TR_hashCleanup(this->handler);
TR_delete(this->handler); TR_delete(this->handler);
TR_delete(this->pending);
TR_delete(this->events); TR_delete(this->events);
} }

12
src/event_dispatcher_start.c

@ -57,16 +57,8 @@ TR_eventDispatcherStart(TR_EventDispatcher this)
int evtid = TR_EVD_CLIENT == this->mode int evtid = TR_EVD_CLIENT == this->mode
? TR_DISPATCHER_EVENT_USER_WAIT ? TR_DISPATCHER_EVENT_USER_WAIT
: TR_DISPATCHER_EVENT_DATA_WAIT; : TR_DISPATCHER_EVENT_DATA_WAIT;
int * toutptr = NULL;
if (! TR_queueEmpty(this->pending)) {
toutptr = &ZERO;
TR_delete(this->events);
this->events = this->pending;
this->pending = TR_new(TR_Queue);
}
event = TR_eventSubjectEmit((TR_EventSubject)this, evtid, toutptr);
event = TR_eventSubjectEmit((TR_EventSubject)this, evtid, NULL);
} else { } else {
event = TR_queueGet(this->events); event = TR_queueGet(this->events);
} }
@ -98,7 +90,7 @@ TR_eventDispatcherStart(TR_EventDispatcher this)
if (TR_EVENT_DONE == done) { if (TR_EVENT_DONE == done) {
TR_delete(event); TR_delete(event);
} else { } else {
TR_eventDispatcherEnqueuePending(this, event);
TR_eventDispatcherEnqueueEvent(this, event);
} }
} }
} }

Loading…
Cancel
Save