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);