void stats_event_category_register(const char *name, struct event_category *parent) { struct event_category *category = p_new(categories_pool, struct event_category, 1); category->parent = parent; category->name = p_strdup(categories_pool, name); /* Create a temporary event to register the category. A bit slower than necessary, but this code won't be called often. */ struct event *event = event_create(NULL); struct event_category *categories[] = { category, NULL }; event_add_categories(event, categories); event_unref(&event); }
void scheduler_push(Scheduler* scheduler, Event* event, GQuark senderHostID, GQuark receiverHostID) { MAGIC_ASSERT(scheduler); SimulationTime eventTime = event_getTime(event); if(eventTime > scheduler->endTime) { event_unref(event); return; } /* parties involved. sender may be NULL, receiver may not! * we MAY NOT OWN the receiver, so do not write to it! */ Host* sender = scheduler_getHost(scheduler, senderHostID); Host* receiver = scheduler_getHost(scheduler, receiverHostID); utility_assert(receiver); utility_assert(receiver == event_getHost(event)); /* push to a queue based on the policy */ scheduler->policy->push(scheduler->policy, event, sender, receiver, scheduler->currentRound.endTime); }