unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Chris Vine <chris@cvine.freeserve.co.uk>
To: guile-user@gnu.org
Subject: Re: Potluck - thread safe event loop with await semantics
Date: Tue, 23 Feb 2016 12:09:16 +0000	[thread overview]
Message-ID: <20160223120916.2ea94c7e@dell.homenet> (raw)
In-Reply-To: <20160223032552.620074ed@capac>

On Tue, 23 Feb 2016 03:25:52 -0300
David Pirotte <david@altosw.be> wrote:
> Hi Chris,
[snip]
> Ah. no, it segfaults here too, but as you know, this example makes a
> new <gclosure> and a new (g-idle-source-new), sets and attach the
> source ... every call: I guess the problem is none are
> freed/released, or at least not 'properly' ? I don't know.  Would an
> 'exact same' C program using pthread work fine?  Probably, but it
> would be nice to confirm.

It would and does work fine in a C program.  See also the
documentation at
https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#glib-The-Main-Event-Loop.description

  "To allow multiple independent sets of sources to be handled in
   different threads, each source is associated with a GMainContext.
   A GMainContext can only be running in a single thread, but sources
   can be added to it and removed from it from other threads."

and at
https://developer.gnome.org/glib/stable/glib-Threads.html#glib-Threads.description

  "GLib itself is internally completely thread-safe (all global
   data is automatically locked), but individual data structure
   instances are not automatically locked for performance reasons. For
   example, you must coordinate accesses to the same GHashTable from
   multiple threads. The two notable exceptions from this rule are
   GMainLoop and GAsyncQueue, which are thread-safe and need no further
   application-level locking to be accessed from multiple threads."

As regards guile-gnome, I guess the problem may well be to do with the
operation of the garbage collector.  However I suspect it is caused by
too eager collection rather than too conservative collection - there is
no obvious sign of excess memory usage.  Probably the collector
sometimes frees memory still in use by the wrapper when the wrapper is
invoked in a multi-threaded context.

> In anycase, I will need Andy's help to
> debug and patch this.  Did you talked to him back then?

No.
 
[snip]
> > On a separate matter, can you fix g-io-add-watch if that has not yet
> > happened? If you try to call it, compilation errors with:
> > 
> >    ERROR: In procedure module-lookup: Unbound variable:
> > <gio-channel>  
> 
> I don't know much [almost nothing] about that part, but it fails here
> too.  I'll see what I can do but don't hold your breath,
> <gio-channel> and friends use special wrappers, so the help of Andy
> would be precious here too ...

I find <gio-channel> strange.  It is inconsistent with other naming
conventions in guile-gnome.  I wonder if it should be <g-io-channel>
and code somewhere assumes that it is?

There are a number of oddities with the wrapper.  For example, for some
reason some GTK+ modules are suppressed.  In particular, I noticed that
sound events via libcanberra don't work on guile-gnome applications.  I
did post bugs about this, and about g-io-add-watch, a number of years
ago.  The thread safety point was kind-of the final straw.

Chris



  reply	other threads:[~2016-02-23 12:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-16 21:45 Potluck - thread safe event loop with await semantics Chris Vine
2016-02-22 12:01 ` Ludovic Courtès
2016-02-22 16:36   ` Marko Rauhamaa
2016-02-22 17:40   ` Chris Vine
2016-02-22 17:53     ` Thompson, David
2016-02-22 18:12       ` Chris Vine
2016-02-22 19:54         ` Christopher Allan Webber
2016-02-22 20:28     ` David Pirotte
2016-02-23  0:31       ` Chris Vine
2016-02-23  1:30         ` Chris Vine
2016-02-23 19:55           ` David Pirotte
2016-02-23  6:25         ` David Pirotte
2016-02-23 12:09           ` Chris Vine [this message]
2016-02-23 16:49             ` Chris Vine
2016-02-25 23:22             ` David Pirotte
2016-02-23  4:58     ` Chris Vine
2016-03-01 20:39     ` Amirouche Boubekki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160223120916.2ea94c7e@dell.homenet \
    --to=chris@cvine.freeserve.co.uk \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).