On Sat, 2004-11-13 at 15:14 +0100, Tom Parker wrote: > - if ((iter = nm_ap_list_iter_new (old_ap_list))) > + if (old_ap_list && (iter = nm_ap_list_iter_new (old_ap_list))) Fundamentally, it seems that the NetworkManagerAPList is inconsistent in that some functions can return NULL (e.g. nm_ap_list_combine), but NULL is not a valid argument for other nm_ap_list functions, like nm_ap_list_iter_new. Rather than propagating NULL handing logic to every caller, it seems cleaner to me to accept NULL as a valid argument inside the ap_list functions as appropriate. As it turned out, this is basically as easy as making nm_ap_list_iter_new (NULL) just return NULL, and removing a bunch of assertions that list arguments aren't NULL, since they just call nm_ap_list_iter_new. It doesn't make sense for all of them though (like nm_ap_list_lock), so this is kind of a kludge. It is probably better to ensure that we always use the empty AP list instead of NULL, but just using NULL seems safer to me for now. I did some grepping and got a sense of where we were able to handle NULL, and it looks like this patch will work (attached). I haven't applied it, since I'm still learning the code myself. Dan, what do you think? > The third one is driving me nuts. The assertion is the "dest!=NULL" at > the top of nm_ap_list_copy_properties (line 426 of > NetworkManagerAPList.c), which is being called by > nm_device_do_normal_scan at roughly line 2445 of NetworkManagerDevice.c. The above patch should fix this too. Let me know if it works for you.
cvs server: Diffing . cvs server: Diffing dispatcher-daemon cvs server: Diffing docs cvs server: Diffing examples cvs server: Diffing examples/python cvs server: Diffing examples/python/systray cvs server: Diffing info-daemon cvs server: Diffing initscript cvs server: Diffing initscript/Debian cvs server: Diffing initscript/Gentoo cvs server: Diffing initscript/RedHat cvs server: Diffing initscript/Slackware cvs server: Diffing panel-applet cvs server: Diffing panel-applet/icons cvs server: Diffing po cvs server: Diffing src Index: src/NetworkManagerAPList.c =================================================================== RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerAPList.c,v retrieving revision 1.20 diff -u -d -r1.20 NetworkManagerAPList.c --- src/NetworkManagerAPList.c 27 Oct 2004 19:02:07 -0000 1.20 +++ src/NetworkManagerAPList.c 13 Nov 2004 19:31:51 -0000 @@ -428,9 +428,6 @@ NMAPListIter *iter; NMAccessPoint *dest_ap; - g_return_if_fail (dest != NULL); - g_return_if_fail (source != NULL); - if ((iter = nm_ap_list_iter_new (dest))) { while ((dest_ap = nm_ap_list_iter_next (iter))) @@ -462,9 +459,6 @@ NMAPListIter *iter; NMAccessPoint *dest_ap; - g_return_if_fail (dest != NULL); - g_return_if_fail (source != NULL); - if ((iter = nm_ap_list_iter_new (dest))) { while ((dest_ap = nm_ap_list_iter_next (iter))) @@ -584,7 +578,8 @@ { NMAPListIter *iter; - g_return_val_if_fail (list != NULL, NULL); + if (list == NULL) + return (NULL); if (!(iter = g_new0 (NMAPListIter, 1))) return (NULL); @@ -652,7 +647,6 @@ NMAPListIter *iter; int i = 0; - g_return_if_fail (list != NULL); g_return_if_fail (name != NULL); if (!(iter = nm_ap_list_iter_new (list))) Index: src/NetworkManagerDevice.c =================================================================== RCS file: /cvs/gnome/NetworkManager/src/NetworkManagerDevice.c,v retrieving revision 1.61 diff -u -d -r1.61 NetworkManagerDevice.c --- src/NetworkManagerDevice.c 11 Nov 2004 02:24:04 -0000 1.61 +++ src/NetworkManagerDevice.c 13 Nov 2004 19:31:51 -0000 @@ -2474,7 +2474,8 @@ } nm_ap_list_iter_free (iter); } - nm_ap_list_unref (old_ap_list); + if (old_ap_list) + nm_ap_list_unref (old_ap_list); /* Generate the "old" list from the 3rd and 4th oldest scans we've done */ old_ap_list = nm_ap_list_combine (dev->options.wireless.cached_ap_list3, earliest_scan); cvs server: Diffing src/backends cvs server: Diffing test
Attachment:
signature.asc
Description: This is a digitally signed message part