Mercurial > pidgin
comparison src/module.c @ 4249:9c7fcb211886
[gaim-migrate @ 4499]
If anyone is curious, the commit before this fixed a bug which
didn't allow you to delete AIM or ICQ people from a deny list.
They'll show up when you sign back online, and will be deleteable
now.
This is a patch from the good Mr. McQueen.
"Twofold attack:
1) Make sure all the callback functions don't throw a mental if the gc
the dialog was asking about has disappeared. Make sure the functions
still free up the data structs as necessary in this case.
2) When setting up a ask dialog, plugins (including prpls) pass in their
handle. The ask dialog struct gets kept in a slist. When unloading a
plugin or prpl, Gaim checks the handle against the list, and sends a
cancel-type message for any outstanding dialogs.
Should avoid crashes from non-modal ask dialogs lying around."
Yeah, so that's a nice lil' improvement.
I also fixed a think where SSI "authorization denied" messages
would be gibberish. That was a bug from just a few hours ago.
Whoops.
Also, since this is like a grown up version of show and tell, I
thought this was funny:
* Robot101 fixes idiocy
<KingAnt> Does that mean I'm going to be nuetered?
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Wed, 08 Jan 2003 08:18:49 +0000 |
| parents | 4927f8dd046f |
| children | 24d2881f75d2 |
comparison
equal
deleted
inserted
replaced
| 4248:ea8fb193f5a0 | 4249:9c7fcb211886 |
|---|---|
| 282 { | 282 { |
| 283 void (*gaim_plugin_remove)(); | 283 void (*gaim_plugin_remove)(); |
| 284 | 284 |
| 285 debug_printf("Unloading %s\n", g_module_name(p->handle)); | 285 debug_printf("Unloading %s\n", g_module_name(p->handle)); |
| 286 | 286 |
| 287 /* cancel any pending dialogs the plugin has */ | |
| 288 do_ask_cancel_by_handle(p->handle); | |
| 289 | |
| 287 /* Attempt to call the plugin's remove function (if there) */ | 290 /* Attempt to call the plugin's remove function (if there) */ |
| 288 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | 291 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) |
| 289 gaim_plugin_remove(); | 292 gaim_plugin_remove(); |
| 290 | 293 |
| 291 plugin_remove_callbacks(p->handle); | 294 plugin_remove_callbacks(p->handle); |
| 322 } | 325 } |
| 323 if (!pl) | 326 if (!pl) |
| 324 return; | 327 return; |
| 325 | 328 |
| 326 debug_printf("Unloading %s\n", g_module_name(p->handle)); | 329 debug_printf("Unloading %s\n", g_module_name(p->handle)); |
| 330 | |
| 331 /* cancel any pending dialogs the plugin has */ | |
| 332 do_ask_cancel_by_handle(p->handle); | |
| 327 | 333 |
| 328 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | 334 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) |
| 329 gaim_plugin_remove(); | 335 gaim_plugin_remove(); |
| 330 plugin_remove_callbacks(p->handle); | 336 plugin_remove_callbacks(p->handle); |
| 331 plugins = g_list_remove(plugins, p); | 337 plugins = g_list_remove(plugins, p); |
