Re: SEGV when dlopen()ing Gnome code
- From: Sean Middleditch <sean middleditch iname com>
- To: Samuel Hocevar <sam zoy org>
- Cc: gnome-devel-list gnome org
- Subject: Re: SEGV when dlopen()ing Gnome code
- Date: Sat, 10 Feb 2001 12:04:55 -0500
Perhaps someone could write a cleaner gnome_shutdown (or gtk_shutdown)
function that calls the shutdown callbacks, and makes sure they are
unregistered from where-ever g_atexit registers them. This would be useful
for a lot of people, especially those who are writing apps that can use
multiple GUI's, selecting which one at run-time (correct me if I'm wrong,
but doesn't OMS work like this? perhaps we could see how they did it).
On 2001.02.10 02:12:54 -0500 Samuel Hocevar wrote:
>
> On Sat, Feb 10, 2001, Havoc Pennington wrote:
>
> > Yes, you can't expect dlopen()'ing an arbitrary library or application
> > to work. ;-)
>
> Well, I just figured that :-)
>
> > There can be all sorts of stuff that gets set up that
> > depends on the lib/app code remaining loaded into the process.
> >
> > I would imagine there are literally several thousand aspects of
> > glib/gtk/gnome-libs that break if you unload the library. They just
> > aren't designed for it.
>
> I do not really agree -- exiting from an application shouldn't be
> very different from unloading a shared object. The only difference here
> is the atexit() callbacks. Actually, both gtk and gdk call g_atexit() to
> register stuff that is to be called on application exit.
>
> This may be a practical way to do things, because one doesn't have to
> bother where data is unallocated, but it looks awful to me. I'd rather
> have these callbacks called at the end of gtk_main() or gnome_main().
>
> For those interested, I found a workaround. It's absolutely ugly,
> and I don't recommend reading the next few sentences to people with
> epilepsy or heart problems. I export a function called g_atexit in my
> code, which stores the gtk and gdk callbacks in a private structure
> instead of calling atexit(). When dlopen()ing the shared object, my
> g_atexit symbol is resolved before Glib's one, which means that when
> calling gnome_init(), my private g_atexit is called. Then I call these
> stored callbacks just after gtk_main() has finished. The library can
> eventually be safely dlclosed().
>
> Well, at least my application doesn't segfault on exit anymore and
> now loads and unloads its Gnome interface on request. But I agree this
> is rather kludgey.
>
> Regards,
> Sam.
> --
> Samuel Hocevar <sam zoy org> <http://sam.zoy.org/>
> for DVDs in Linux screw the MPAA and ; do dig $DVDs.z.zoy.org ; done | \
> perl -ne 's/\.//g; print pack("H224",$1) if(/^x([^z]*)/)' | gunzip
>
> _______________________________________________
> gnome-devel-list mailing list
> gnome-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gnome-devel-list
>
--
Sean Middleditch
of
AwesomePlay Productions, Inc.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]