@@ -32,19 +32,21 @@ gw2al_api_ret gw2al_core__watch_event(gw2al_event_id id, gw2al_hashed_name subsc
3232 evDsc->subs = (gw2al_event_subscriber*)realloc (evDsc->subs , subArrSz);
3333 }
3434
35+ ++evDsc->activeSubCount ;
36+
3537 gw2al_event_subscriber* evSub = &evDsc->subs [subId];
3638
3739 evSub->handler = handler;
3840 evSub->priority = priority;
3941 evSub->subscriber = subscriber;
4042
41- // sort priority
43+ // re sort priority
4244
4345 for (int i = 0 ; i != subc; ++i)
4446 {
4547 for (int j = i; j != subc; ++j)
4648 {
47- if (evDsc->subs [i].priority < evDsc->subs [j].priority )
49+ if (( evDsc->subs [i].priority < evDsc->subs [j].priority ) || ((evDsc-> subs [i]. handler == NULL ) && (evDsc-> subs [j]. handler != NULL )) )
4850 {
4951 gw2al_event_subscriber swp = evDsc->subs [i];
5052 evDsc->subs [i] = evDsc->subs [j];
@@ -80,6 +82,23 @@ void gw2al_core__unwatch_event(gw2al_event_id id, gw2al_hashed_name subscriber)
8082 evDsc->subs [i].priority = 0 ;
8183 }
8284 }
85+
86+ ++evDsc->activeSubCount ;
87+
88+ // re sort priority
89+
90+ for (int i = 0 ; i != subc; ++i)
91+ {
92+ for (int j = i; j != subc; ++j)
93+ {
94+ if ((evDsc->subs [i].priority < evDsc->subs [j].priority ) || ((evDsc->subs [i].handler == NULL ) && (evDsc->subs [j].handler != NULL )))
95+ {
96+ gw2al_event_subscriber swp = evDsc->subs [i];
97+ evDsc->subs [i] = evDsc->subs [j];
98+ evDsc->subs [j] = swp;
99+ }
100+ }
101+ }
83102}
84103
85104gw2al_event_id gw2al_core__query_event (gw2al_hashed_name name)
@@ -98,6 +117,7 @@ gw2al_event_id gw2al_core__query_event(gw2al_hashed_name name)
98117 memset (evDsc->subs , 0 , subArrSz);
99118
100119 evDsc->id = eventStorage.register_new_obj (evDsc, name);
120+ evDsc->activeSubCount = 0 ;
101121
102122 LOG_DEBUG (L" core" , L" new event %016llX = %lu" , name, evDsc->id );
103123 }
@@ -109,10 +129,10 @@ unsigned int gw2al_core__trigger_event(gw2al_event_id id, void * data)
109129{
110130 gw2al_event_dsc* evDsc = eventStorage.get_obj (id);
111131
112- unsigned int subc = evDsc->subCount ;
132+ unsigned int subc = evDsc->activeSubCount ;
113133
114134 for (int i = 0 ; i != subc; ++i)
115- {
135+ {
116136 evDsc->subs [i].handler (data);
117137 }
118138
0 commit comments