mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-25 10:16:38 +02:00
- Added EventMarkDel which marks an event for deletion for the (next) DoEvents() call.
- Fixed /rehash stall caused by delayed unloading of the scan module (deadlock).
This commit is contained in:
@@ -1941,3 +1941,5 @@ seen. gmtime warning still there
|
||||
- Added set::options::dont-resolve (=hostnames of incomming clients won't be resolved).
|
||||
- Code cleanup (gcc 3.2 warnings with -Wall).
|
||||
- Removed/updated some NS stuff
|
||||
- Added EventMarkDel which marks an event for deletion for the (next) DoEvents() call.
|
||||
- Fixed /rehash stall caused by delayed unloading of the scan module (deadlock).
|
||||
|
||||
@@ -195,10 +195,13 @@ struct _eventinfo {
|
||||
};
|
||||
|
||||
|
||||
/* Huh? Why are those not marked as extern?? -- Syzop */
|
||||
|
||||
#define EventAdd(name, every, howmany, event, data) EventAddEx(NULL, name, every, howmany, event, data)
|
||||
Event *EventAddEx(Module *, char *name, long every, long howmany,
|
||||
vFP event, void *data);
|
||||
Event *EventDel(Event *event);
|
||||
Event *EventMarkDel(Event *event);
|
||||
Event *EventFind(char *name);
|
||||
int EventMod(Event *event, EventInfo *mods);
|
||||
void DoEvents(void);
|
||||
|
||||
+11
-1
@@ -94,6 +94,12 @@ Event *EventAddEx(Module *module, char *name, long every, long howmany,
|
||||
|
||||
}
|
||||
|
||||
Event *EventMarkDel(Event *event)
|
||||
{
|
||||
event->howmany = -1;
|
||||
return event;
|
||||
}
|
||||
|
||||
Event *EventDel(Event *event)
|
||||
{
|
||||
Event *p, *q;
|
||||
@@ -154,6 +160,9 @@ inline void DoEvents(void)
|
||||
Event temp;
|
||||
|
||||
for (eventptr = events; eventptr; eventptr = eventptr->next)
|
||||
{
|
||||
if (eventptr->howmany == -1)
|
||||
goto freeit;
|
||||
if ((eventptr->every == 0) || ((TStime() - eventptr->last) >= eventptr->every))
|
||||
{
|
||||
eventptr->last = TStime();
|
||||
@@ -163,13 +172,14 @@ inline void DoEvents(void)
|
||||
eventptr->howmany--;
|
||||
if (eventptr->howmany == 0)
|
||||
{
|
||||
freeit:
|
||||
temp.next = EventDel(eventptr);
|
||||
eventptr = &temp;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EventStatus(aClient *sptr)
|
||||
|
||||
+2
-3
@@ -176,9 +176,8 @@ int m_scan_Unload(void)
|
||||
HookDel(ConfRun);
|
||||
HookDel(ConfPostTest);
|
||||
HookDel(ServerStats);
|
||||
LockEventSystem();
|
||||
EventDel(Scannings_clean);
|
||||
UnlockEventSystem();
|
||||
/* Mark for deletion */
|
||||
EventMarkDel(Scannings_clean);
|
||||
IRCMutexDestroy(Scannings_lock);
|
||||
if (scan_message)
|
||||
free(scan_message);
|
||||
|
||||
Reference in New Issue
Block a user