mish at rsu.ru
Thu Jul 12 04:11:14 EDT 2007
Richard Laager wrote:
>> And the caller of
>> purple_log_write() shouldn't have to deal with it. Mostly I'm just wary about
>> adding an extra callback function everywhere to free the message. What do
>> other people think?
> I think the callback should be optional. If NULL, no callback would be
> made. Then existing callers could call purple_log_write_nonblocking with
> NULL for each of the callback and data.
Callback in purple_log_write_nonblocking is optional, so it's possible
pass NULL argument.
> This leaves two questions:
> 1) Should purple_log_write_nonblocking g_strdup from and message, or
> should they be char *s that it takes ownership of? Michael, I think you
> should see what happens with those variables for most calls to
> purple_log_write(). If everyone is immediately freeing those, then we
> should have it take ownership instead. If some callers are not
> immediately freeing them, then we should have it g_strdup them.
> You may find that from is typically being re-used while message is not.
> If that's the case, we can leave from as a const char * and g_strdup it,
> but take ownership of message.
I've look through the code once more, for all calls we free messages
immediatly after call, so we can take
ownership,but there is case when purple_log_write is placed into loop so
we must pass a copy of message
to purple_log_write. A piece of code for more defails:
for (log = conv->logs; log != NULL; log = g_list_next(log))
purple_log_write_nonblocking((PurpleLog *)log->data, flags,
mtime, g_strdup(message), NULL, NULL);
If it's ok and not overkill, we definitly need take ownership of
message, as for from variable, we
should leave as it is.
With best regards,
More information about the Devel