ofono: Cancel pending SetProperty
[framework/connectivity/connman.git] / plugins / ofono.c
index b15ad03..f15c36d 100644 (file)
@@ -338,8 +338,10 @@ static int set_property(struct modem_data *modem,
        DBG("%s path %s %s.%s", modem->path, path, interface, property);
 
        if (modem->call_set_property != NULL) {
-               connman_error("Pending SetProperty");
-               return -EBUSY;
+               DBG("Cancel pending SetProperty");
+
+               dbus_pending_call_cancel(modem->call_set_property);
+               modem->call_set_property = NULL;
        }
 
        message = dbus_message_new_method_call(OFONO_SERVICE, path,
@@ -2409,6 +2411,22 @@ static struct connman_device_driver modem_driver = {
        .disable        = modem_disable,
 };
 
+static int tech_probe(struct connman_technology *technology)
+{
+       return 0;
+}
+
+static void tech_remove(struct connman_technology *technology)
+{
+}
+
+static struct connman_technology_driver tech_driver = {
+       .name           = "cellular",
+       .type           = CONNMAN_SERVICE_TYPE_CELLULAR,
+       .probe          = tech_probe,
+       .remove         = tech_remove,
+};
+
 static guint watch;
 static guint modem_added_watch;
 static guint modem_removed_watch;
@@ -2523,6 +2541,13 @@ static int ofono_init(void)
                goto remove;
        }
 
+       err = connman_technology_driver_register(&tech_driver);
+       if (err < 0) {
+               connman_device_driver_unregister(&modem_driver);
+               connman_network_driver_unregister(&network_driver);
+               goto remove;
+       }
+
        return 0;
 
 remove:
@@ -2566,6 +2591,7 @@ static void ofono_exit(void)
                context_hash = NULL;
        }
 
+       connman_technology_driver_unregister(&tech_driver);
        connman_device_driver_unregister(&modem_driver);
        connman_network_driver_unregister(&network_driver);