From: Peter Meerwald <[email protected]>
we are seeing segfaults when connect_timeout() is called
(gdb) bt
0 0xb6f20f84 in g_str_hash () from /usr/lib/libglib-2.0.so.0
1 0xb6f20aa8 in g_hash_table_lookup_extended ()
from /usr/lib/libglib-2.0.so.0
2 0x0003e87c in allow_property_changed (service=0xda220)
at src/service.c:4428
3 0x0003effc in dns_changed (service=0xda220) at src/service.c:1950
4 0x000454ac in service_indicate_state (service=0xda220)
at src/service.c:5441
5 __connman_service_ipconfig_indicate_state (service=0xda220,
new_state=<optimized out>, type=<optimized out>) at src/service.c:5806
6 0x00037c58 in set_disconnected (network=0xd3c40) at src/network.c:677
7 0x00038784 in __connman_network_disconnect (network=0xd3c40)
at src/network.c:1507
8 0x000460f8 in connect_timeout (user_data=0xda220) at src/service.c:3955
9 0xb6f2c3d4 in ?? () from /usr/lib/libglib-2.0.so.0
10 0xb6f2c3d4 in ?? () from /usr/lib/libglib-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
the refcount goes to zero while still processing connect_timeout()
---
src/service.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/service.c b/src/service.c
index 921a0e4..28aff36 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3855,6 +3855,7 @@ static void remove_timeout(struct connman_service
*service)
if (service->timeout > 0) {
g_source_remove(service->timeout);
service->timeout = 0;
+ connman_service_unref(service);
}
}
@@ -3977,6 +3978,8 @@ static gboolean connect_timeout(gpointer user_data)
CONNMAN_SERVICE_CONNECT_REASON_USER)
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
+ connman_service_unref(service);
+
return FALSE;
}
@@ -6026,7 +6029,7 @@ int __connman_service_connect(struct connman_service
*service,
if (err == -EINPROGRESS) {
if (service->timeout == 0)
service->timeout = g_timeout_add_seconds(
- CONNECT_TIMEOUT, connect_timeout, service);
+ CONNECT_TIMEOUT, connect_timeout,
connman_service_ref(service));
return -EINPROGRESS;
}
--
1.7.10.4
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman