if (resmon_find_monitor(resmon, RESMON_TIMER, monitor->id))
return -EINVAL;
+ if (interval <= 0 || interval >= UINT_MAX)
+ return -EINVAL;
+
monitor->id = add_timer_handler(interval, resmon_timer_func, monitor);
if (!monitor->id)
return -EPERM;
if (!resmon_find_monitor(resmon, RESMON_TIMER, monitor->id))
return -EINVAL;
+ if (interval <= 0 || interval >= UINT_MAX)
+ return -EINVAL;
+
/* Update timer interval of timer-based resmon */
delete_timer_handler(monitor->id);
/* Get instance of struct resmon_ops according to resmon_src_type */
monitor->ops = resmon_get_ops(src_type);
+ if (!monitor->ops) {
+ ret = -EINVAL;
+ goto err;
+ }
/* Add timer-based resource monitor */
ret = resmon_timer_add(monitor, timer_interval);
if (!monitor)
return -ENOMEM;
+ monitor->res = res;
monitor->resmon = resmon;
monitor->src_type = src_type;
monitor->user_func = user_func;
monitor = resmon_find_monitor(res->resmon, RESMON_UEVENT, id);
if (!monitor) {
- _E("failed to find monitor (res_name: %s, type: %d)\n",
+ _E("failed to find monitor (res_name: %s, id: %d)\n",
res->config_data.res_name, id);
return -EINVAL;
}
* pass_resmon_unregister_uevent - Unregister uevent-based resource monitor
*
* @res: the instance of struct pass_resource
- * @src_type: the type of resource monitor among 'enum resmon_src_type'.
+ * @id: Uevent ID of resource monitor source
*/
-int pass_resmon_unregister_uevent(struct pass_resource *res,
- enum resmon_src_type src_type);
+int pass_resmon_unregister_uevent(struct pass_resource *res, guint id);
/**
* @brief Prepare PASS_MODULE_RESMON(Resource Monitor) module