core: device-notifier: Support user_data parameter for receiver
authorChanwoo Choi <cw00.choi@samsung.com>
Thu, 2 Feb 2017 04:39:33 +0000 (13:39 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Thu, 2 Feb 2017 23:43:19 +0000 (08:43 +0900)
The current device-notifier didn't pass ther separate 'void *user_data'
parameter on callback function. So, must need global variables to share
the information. So, This patch supports the 'void *user_data' parameter
for device-notifier.

[Detailed new prototype for register_notifier()]
Before:
- int register_notifier(status, *func);
- int (*func)(void *data));

After:
- int register_notifier(status, *func, void *user_data);
- int (*func)(void *data, void *user_data));

Change-Id: Iec96cc18413a34a14f1a57585b0672548df34c0b
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
src/core/device-notifier.c
src/core/device-notifier.h
src/core/udev.c
src/pass/pass-gov.c
src/pmqos/pmqos.c

index 285c2321ec17c11361bb0c74eea7077454317745..79938dbcb1c6631c412f33aff9cf1ac65a4f4606 100644 (file)
@@ -25,7 +25,8 @@
 struct device_notifier {
        bool deleted;
        enum device_notifier_type status;
-       int (*func)(void *data);
+       int (*func)(void *data, void *user_data);
+       void *user_data;
 };
 
 static dd_list *device_notifier_list;
@@ -35,7 +36,8 @@ static Ecore_Idler *idl;
        DD_LIST_FOREACH(a, b, d) \
                if (e == d->e && f == (d->f))
 
-int register_notifier(enum device_notifier_type status, int (*func)(void *data))
+int register_notifier(enum device_notifier_type status,
+               int (*func)(void *data, void *user_data), void *user_data)
 {
        dd_list *n;
        struct device_notifier *notifier;
@@ -59,13 +61,15 @@ int register_notifier(enum device_notifier_type status, int (*func)(void *data))
 
        notifier->status = status;
        notifier->func = func;
+       notifier->user_data = user_data;
 
        DD_LIST_APPEND(device_notifier_list, notifier);
 
        return 0;
 }
 
-int unregister_notifier(enum device_notifier_type status, int (*func)(void *data))
+int unregister_notifier(enum device_notifier_type status,
+               int (*func)(void *data, void *user_data))
 {
        dd_list *n;
        struct device_notifier *notifier;
@@ -108,7 +112,7 @@ void device_notify(enum device_notifier_type status, void *data)
        DD_LIST_FOREACH(device_notifier_list, n, notifier) {
                if (!notifier->deleted && status == notifier->status) {
                        if (notifier->func)
-                               notifier->func(data);
+                               notifier->func(data, notifier->user_data);
                }
        }
 
index 4ac22bc7c94a604407190f25e8a2c5e3e4e0f05a..9ae29be53a9da7e92739340ca7553ccfab8bd819 100644 (file)
@@ -30,8 +30,10 @@ enum device_notifier_type {
 /*
  * This is for internal callback method.
  */
-int register_notifier(enum device_notifier_type status, int (*func)(void *data));
-int unregister_notifier(enum device_notifier_type status, int (*func)(void *data));
+int register_notifier(enum device_notifier_type status,
+               int (*func)(void *data, void *user_data), void *user_data);
+int unregister_notifier(enum device_notifier_type status,
+               int (*func)(void *data, void *user_data));
 void device_notify(enum device_notifier_type status, void *value);
 
 #endif /* __DEVICE_NOTIFIER_H__ */
index 71d72be761e3e6315f000c219d3893107bb22085..3413f05d1776c786ab369370eec3dff0369b7ef0 100644 (file)
@@ -316,7 +316,7 @@ static const struct edbus_method edbus_methods[] = {
        { UDEV,   "sis",     "i", dbus_udev_handler },
 };
 
-static int device_change_poweroff(void *data)
+static int device_change_poweroff(void *data, void *user_data)
 {
        uevent_control_stop(&kevent);
        uevent_control_stop(&uevent);
@@ -327,7 +327,8 @@ static void udev_init(void *data)
 {
        int ret;
 
-       register_notifier(DEVICE_NOTIFIER_POWEROFF, device_change_poweroff);
+       register_notifier(DEVICE_NOTIFIER_POWEROFF, device_change_poweroff,
+                       NULL);
 
        ret = register_edbus_method(DEVICED_PATH_SYSNOTI,
                        edbus_methods, ARRAY_SIZE(edbus_methods));
index 904ac72410e0c1264c7e03def868cdb64b941db7..989af605bca6bc4165f58a5d31df307432c3a9c4 100644 (file)
@@ -62,7 +62,7 @@ static bool is_enabled(struct pass_policy *policy)
  *                              DONE notifier
  * @data: NULL, this parameter isn't used
  */
-static int pass_notifier_booting_done(void *data)
+static int pass_notifier_booting_done(void *data, void *user_data)
 {
        int i;
 
@@ -81,7 +81,7 @@ static int pass_notifier_booting_done(void *data)
        return 0;
 }
 
-static int pass_notifier_pmqos(void *data)
+static int pass_notifier_pmqos(void *data, void *user_data)
 {
        int i;
 
@@ -105,11 +105,11 @@ static int pass_notifier_pmqos(void *data)
 static int pass_notifier_init(struct pass_policy *policy)
 {
        /* Register DEVICE_NOTIFIER_PMQOS */
-       register_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos);
+       register_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos, policy);
 
        /* Register DEVICE_NOTIFIER_BOOTING_DONE */
        register_notifier(DEVICE_NOTIFIER_BOOTING_DONE,
-                         pass_notifier_booting_done);
+                         pass_notifier_booting_done, policy);
 
        /*
         * FIXME: Current notifier of PASS didn't pass separate user_data
index 76e57826a235fd9a9232fdf7a3e1f91d8809bd0f..b39fb4d13e53accee6bc770fbe43d0cb2ae24b37 100644 (file)
@@ -411,7 +411,7 @@ static const struct edbus_method edbus_methods[] = {
        { "MyfilesScroll",        "i",    "i", dbus_pmqos_handler },
 };
 
-static int booting_done(void *data)
+static int booting_done(void *data, void *user_data)
 {
        static int done;
        struct edbus_method *methods = NULL;
@@ -448,7 +448,7 @@ out:
 
 static void pmqos_init(void *data)
 {
-       register_notifier(DEVICE_NOTIFIER_BOOTING_DONE, booting_done);
+       register_notifier(DEVICE_NOTIFIER_BOOTING_DONE, booting_done, NULL);
 }
 
 static void pmqos_exit(void *data)