Package: glib2.0
Severity: normal

Summary
-------

Recent upstream patches contained in glib2.0_2.20.4-1 cause the glib2.0-derived
packages in squeeze to depend on kernel functionality -- inotify_init1() --
that is not available in Lenny kernels. These packages should not depend on
such functionality until squeeze is released.

Remediations
------------

A reasonable compromise might be to adjust the glib2.0 source code to call
inotify_init whenever inotify_init1 fails, as in the following outline:

> inotify_instance_fd = -1;
> 
> #ifdef HAVE_INOTIFY_INIT1
>   inotify_instance_fd = inotify_init1 (IN_CLOEXEC);
> #endif
> 
> if (inotify_instance_fd < 0)
>    inotify_instance_fd = inotify_init ();
> 
> if (inotify_instance_fd < 0)
>    return FALSE;

(Thanks to dilin...@queued.mit.edu for the code.)

Details
-------

I periodically test the Sugar packaging in squeeze and sid by installing
sugar-0.84 into clean Debian chroots on top of my main (lenny) machine. Last
week, Sugar regressed in that it became unable to launch the Journal or to find
installed activities and the Sugar ~/.sugar/default/logs/shell.log file
contained the following suspicious new messages:

> (sugar-session:1844): GLib-GIO-WARNING **: Could not initialize inotify
>
> Traceback (most recent call last):
>   File "/usr/lib/python2.5/site-packages/jarabe/desktop/favoritesview.py", 
> line 122, in __connect_to_bundle_registry_cb
>     registry = bundleregistry.get_registry()
>   File "/usr/lib/python2.5/site-packages/jarabe/model/bundleregistry.py", 
> line 394, in get_registry
>     _instance = BundleRegistry()
>   File "/usr/lib/python2.5/site-packages/jarabe/model/bundleregistry.py", 
> line 58, in __init__
>     monitor = directory.monitor_directory()
> gio.Error: Unable to find default local directory monitor type

Investigating these messages pointed me to 

   gio/inotify/inotify-helper.c:89,
   gio/inotify/inotify-kernel.c:194, and
   gio/glocaldirectorymonitor.c:295

in the glib2.0 source code.

The problem seems to have been introduced into inotify-kernel.c in this recent
commit:

  
http://git.gnome.org/cgit/glib/commit/?id=2192f1003f27eaf523917a046a42d8fc0019a8
7b

which results in the following logic in inotify-kernel.c:

> #ifdef HAVE_INOTIFY_INIT1
>   inotify_instance_fd = inotify_init1 (IN_CLOEXEC);
> #else
>   inotify_instance_fd = inotify_init ();
> #endif
> 
> if (inotify_instance_fd < 0)
>   return FALSE;

Unfortunately, inotify_init1() only became available in kernel-2.6.27. Lenny is
currently using 2.6.26.

Attachment: signature.asc
Description: PGP signature

Reply via email to