FYI: 4.7 panel and plugins

Brian J. Tarricone bjt23 at
Tue May 26 09:27:08 CEST 2009

On 05/25/2009 11:42 PM, Nick Schermer wrote:

> FYI: g_thread_init should also be called before using GSlice, which is
> used by gobject, so it cannot hurt to call it all the time.

I really hope you'll reconsider this.  Calling g_thread_init() requires 
that a program is linked to libgthread, which requires that the program 
is linked to libpthread.  Libpthread replaces a large number of libc 
functions with (slower) thread-safe versions, which obviously isn't 
necessary in a non-threaded applications.  This also slows app startup 
since the dynamic linker has to work harder (not just to load extra 
libraries, but to override existing symbols in the GST).

Also I believe that some glib/gobject stuff is slower when in threaded 
mode due to some extra required locking.

Is all this significant?  I don't know; I've never profiled it.  But why 
add extra overhead and extra startup time when it's not necessary?

g_thread_init() is absolutely *not* required in a gslice-using 
application if the application does not use threads.

Having plugins not know if they're external or internal is somewhat nice 
from an implementation perspective[1], but this is an abstraction that 
really shouldn't be there.


[1] Or not really... 3rd-party plugins (and even most 1st-party ones) 
should never be internal.  I might even go so far to suggest that there 
should be *no* exported internal plugin interface, and the few plugins 
that can/should be internal that are distributed with the panel itself 
use an unpublished API.  On the other hand... is there a need for 
internal plugins at all?  Would there be much of a performance/resource 
usage impact if (for example) the launcher plugin was made external?

More information about the Xfce4-dev mailing list