/** Evaluate need for wakelock * * @param self wakelock timer object, or NULL */ static void mce_wltimer_eval_wakelock(const mce_wltimer_t *self) { if( !self ) goto EXIT; if( !self->wlt_name) goto EXIT; if( self->wlt_timer_id ) mce_wakelock_obtain(self->wlt_name, -1); else mce_wakelock_release(self->wlt_name); EXIT: return; }
/** Install/remove alarm queue D-Bus name owner monitor * * @param sender Private D-Bus name to monitor * @param monitor true/false to start/stop monitoring */ static void queue_monitor_setup(const char *sender, bool monitor) { if( monitor ) { gssize cnt = mce_dbus_owner_monitor_add(sender, queue_owner_monitor_dbus_cb, &queue_owner_monitor_list, ALARM_MAX_MONITORED); if( cnt != -1 ) { /* A owner monitor was added/renewed */ mce_log(LL_DEVEL, "monitoring dbus name: %s", sender); mce_wakelock_obtain(ALARM_IMMINENT_WAKELOCK_NAME, ALARM_IMMINENT_TIMEOUT_MS); } } else { gssize cnt = mce_dbus_owner_monitor_remove(sender, &queue_owner_monitor_list); if( cnt == 0 ) { /* The last monitor was removed */ mce_log(LL_DEVEL, "all dbus name monitors removed"); mce_wakelock_release(ALARM_IMMINENT_WAKELOCK_NAME); } } }