Hi Eduardo,

+       struct connman_technology *technology;

Useless var, see below.

for (list = driver_list; list; list = list->next) {
                if (list->data == driver)
@@ -1254,8 +1255,11 @@ int connman_technology_driver_register(struct 
connman_technology_driver *driver)
exist:
        if (driver->type == CONNMAN_SERVICE_TYPE_P2P) {
-               if (!technology_get(CONNMAN_SERVICE_TYPE_P2P))
+               technology = technology_get(CONNMAN_SERVICE_TYPE_P2P);
+               if (!technology)

Keep the code as before, you are not fixing anything here.

                        return -ENOMEM;
+               else if (driver->probe)
+                       driver->probe(technology);
        }

If wifi is disabled, it gets soft-rfkill: at this point p2p technology should be unregistered, thus no longer exist in the technology list.

It seems you have found a p2p technology refcount issue.
I instrumented a bit and it's then visible:

connmand[10575]: src/technology.c:connman_technology_driver_unregister() Unregistering driver 0x6b92c0 name p2p
connmand[10575]: src/technology.c:technology_find() type 9
connmand[10575]: src/technology.c:technology_put() technology 0x20ef690 - refs 2

When disabling wifi: p2p really should disappear.

Will fix that.

Thanks for testing and finding an issue,

Tomasz
_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to