static void super_io_cb(void *super_data, void *id, int fd,
mrp_io_event_t events, void *user_data)
{
- mrp_mainloop_t *ml = (mrp_mainloop_t *)user_data;
- mrp_superloop_ops_t *ops = ml->super_ops;
+ mrp_mainloop_t *ml = NULL;
+ mrp_superloop_ops_t *ops = NULL;
+
+ ml = (mrp_mainloop_t *)user_data;
+ if (ml == NULL) {
+ mrp_log_error("Passed NULL mainloop handle to callback");
+ return;
+ }
+
+ ops = ml->super_ops;
+ if (ops == NULL) {
+ mrp_log_error("Mainloop operation are NULL");
+ return;
+ }
MRP_UNUSED(super_data);
MRP_UNUSED(id);
MRP_UNUSED(fd);
MRP_UNUSED(events);
- ops->mod_defer(ml->super_data, ml->work, TRUE);
+ if (ops->mod_defer)
+ ops->mod_defer(ml->super_data, ml->work, TRUE);
}
static void super_timer_cb(void *super_data, void *id, void *user_data)
{
- mrp_mainloop_t *ml = (mrp_mainloop_t *)user_data;
- mrp_superloop_ops_t *ops = ml->super_ops;
+ mrp_mainloop_t *ml = NULL;
+ mrp_superloop_ops_t *ops = NULL;
+
+ ml = (mrp_mainloop_t *)user_data;
+ if (ml == NULL) {
+ mrp_log_error("Passed NULL mainloop handle to callback");
+ return;
+ }
+
+ ops = ml->super_ops;
+ if (ops == NULL) {
+ mrp_log_error("Mainloop operation are NULL");
+ return;
+ }
MRP_UNUSED(super_data);
MRP_UNUSED(id);
- ops->mod_defer(ml->super_data, ml->work, TRUE);
+ if (ops->mod_defer)
+ ops->mod_defer(ml->super_data, ml->work, TRUE);
}
static void super_work_cb(void *super_data, void *id, void *user_data)
{
- mrp_mainloop_t *ml = (mrp_mainloop_t *)user_data;
- mrp_superloop_ops_t *ops = ml->super_ops;
+ mrp_mainloop_t *ml = NULL;
+ mrp_superloop_ops_t *ops = NULL;
unsigned int timeout;
+ ml = (mrp_mainloop_t *)user_data;
+ if (ml == NULL) {
+ mrp_log_error("Passed NULL mainloop handle to callback");
+ return;
+ }
+
+ ops = ml->super_ops;
+ if (ops == NULL) {
+ mrp_log_error("Mainloop operation are NULL");
+ return;
+ }
+
MRP_UNUSED(super_data);
MRP_UNUSED(id);
*/
timeout = mrp_list_empty(&ml->deferred) ? ml->poll_timeout : 0;
- ops->mod_timer(ml->super_data, ml->timer, timeout);
- ops->mod_defer(ml->super_data, ml->work, FALSE);
+ if (ops->mod_timer && ops->mod_defer) {
+ ops->mod_timer(ml->super_data, ml->timer, timeout);
+ ops->mod_defer(ml->super_data, ml->work, FALSE);
+ }
}
else {
- if (ml->iow != NULL) {
+ if (ops->del_io != NULL && ml->iow != NULL) {
ops->del_io(ml->super_data, ml->iow);
ml->iow = NULL;
}
- if (ml->work != NULL) {
+ if (ops->del_defer != NULL && ml->work != NULL) {
ops->del_defer(ml->super_data, ml->work);
ml->work = NULL;
}
- if (ml->timer != NULL) {
+ if (ops->del_timer != NULL && ml->timer != NULL) {
ops->del_timer(ml->super_data, ml->timer);
ml->timer = NULL;
}