diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2012-01-18 12:48:35 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-01-20 01:46:59 +0100 |
commit | 0a2d884684c4201219c4cc1e96ad9918eb1a9ecf (patch) | |
tree | 1ef63ff6d6aa0924a444120ea049658f8d68ee88 /src/ipconfig.c | |
parent | 28cfb9f31a6ef26df6917a9aa4f3c3eb676a5bc9 (diff) | |
download | connman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.tar.gz connman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.tar.bz2 connman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.zip |
ipconfig: Possible to have double unref
Because we do not check that origin pointer is not this ipconfig,
it is possible that we might try to unref the ipconfig one time
too many.
Something like this was seen in the log file:
connmand[19208]: src/ipconfig.c:enable_ipv6()
connmand[19208]: src/ipconfig.c:__connman_ipconfig_unref() ipconfig 0x47502f0 refcount 0
connmand[19208]: src/ipconfig.c:__connman_ipconfig_disable() ipconfig 0x47502f0
connmand[19208]: src/ipconfig.c:disable_ipv6()
connmand[19208]: src/ipconfig.c:__connman_ipconfig_unref() ipconfig 0x47502f0 refcount -1
Diffstat (limited to 'src/ipconfig.c')
-rw-r--r-- | src/ipconfig.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c index 3429d1b8..75cb56e5 100644 --- a/src/ipconfig.c +++ b/src/ipconfig.c @@ -1327,7 +1327,7 @@ void __connman_ipconfig_unref(struct connman_ipconfig *ipconfig) __connman_ipconfig_set_ops(ipconfig, NULL); - if (ipconfig->origin != NULL) { + if (ipconfig->origin != NULL && ipconfig->origin != ipconfig) { __connman_ipconfig_unref(ipconfig->origin); ipconfig->origin = NULL; } |