libpurple for non-gui clients

Kyryll A Mirnenko aka Mirya mirya at zoc.com.ua
Fri Aug 10 09:33:23 EDT 2007


On Thursday 09 August 2007 15:46, you wrote:
> On Thu, Aug 09, 2007 at 03:18:44PM +0300, Kyryll A Mirnenko aka Mirya wrote:
> > There's some sort of a problem using libpurple for non-ui clients: it
> > creates a conversation for every little talk. If a non-ui client handles
> > lots of news users it becomes a hazard.
>
> By "hazard", do you mean "uses a tonne of memory"?  A PurpleConversation
> is 44 bytes, a PurpleConvIm is 24 more, and the strings and hash tables
> inside add up to, for one I have open now, about 150 more bytes.
> Conservatively, four thousand conversations is about a megabyte of
> memory.
Anyway I need to clean them up sometime.

> The crash is presumably because write_conv is being called from some
> function which will use the PurpleConversation struct again before
> returning.  You could use an idle callback as follows:
>
>     static gboolean
>     idle_destroy_conversation_cb (gpointer data)
>     {
>         PurpleConversation *conv = (PurpleConversation *)data;
>         purple_conversation_destroy (conv);
>         return FALSE; /* don't keep calling this */
>     }
>
>     /* ... code scrolls by for a while ... */
>     /* meanwhile, in your write_conv callback: */
>         g_idle_add (idle_destroy_conversation_cb, conv);
>
There's a little problem with that idea: if conversation was used twice, it 
will try to free it twice. Some tracking must be added, not so simple as 
someone maight consider
-- 
Regards, Mirya
ICQ #313898202




More information about the Devel mailing list