[sugar] Ticket #1289, patch review

Mike C. Fletcher mcfletch at vrplumber.com
Sat Apr 7 00:34:24 EDT 2007


Marco Pesenti Gritti wrote:
> First of all this is really useful, thanks!
>   
Most welcome.
> +        # XXX this creates an uncollectable object, should be handled
> +        # using a weakref callback...
>          gobject.source_remove(self._launch_timeout_id)
>          self._launch_timeout_id = 0
>
> I don't understand this. To which object are you referring?
>   
The current object, in this instance, a HomeActivity.  When you define a 
__del__ method you prevent Python's garbage collection system from 
collecting cycles that happen to include this object.  Generally 
speaking, you shouldn't use __del__ for this kind of cleanup work, 
instead use a weakref.ref with a callable that will clean up after the 
object (without any reference to the attributes of the object).  It 
takes more work (because by the time it is called the object is already 
gone), but in complex systems it tends to produce fewer hard-to-debug 
memory leaks.

 >>> import weakref
 >>> class x(object):
...     def __init__( self ):
...             x = 2
...             def closer( ref ):
...                     print x
...             self._closer = weakref.ref( self, closer )
...
 >>> y = x()
 >>> del y
2

Not a critical issue unless we introduce a reference cycle at some 
point, but that might happen some day when we aren't thinking about this 
method.
> This code should go away at some point I think, we should just use the
> dbus timeout.
>   
Fair enough.
> +        """Retrieve the "activity_id" passed in to our constructor
> +        
> +        XXX What is the activity id, really?
>
> Each activity instance has a unique id, so that it can be resumed and
> shared on the network.
>   
Yes, but what *is* it, would be nice to have a sample of what one looks 
like (so programmers recognise them), rules on how they are constructed, 
how unique they are, how we deal with collisions, etceteras.  Is this a 
GUID?  Is it a URL-like string?  Is it some large unique number?  Is it 
an SHA hash of something?  The XXX was a note to ourselves that we need 
to describe these things somewhere in full.
>      def get_window(self):
> +        """Retrieve the X-windows root window of this application
> +        
> +        This was stored by the set_window method.
> +        
> +        XXX What called that?
> +        """
>
> Activities are added to HomeModel just after starting them, before the
> window actually appears, so that we can do startup notification. So
> HomeModel listen for new windows creation and when the one associated
> with an HomeActivity appears, it set_window on it.
>   
Alright, have updated the doc string to reflect that.
> +    Note: there seem to be logic issues in this function
>   
...
> Haven't seen the function but if you want to refactor it and post a
> patch that would be useful. Dan might have more insights on why it does
> what it does.
>   
Okay, will look into that.
> +    This object uses a dbus method on the ActivityFactory
> +    service to create the new activity.  It generates 
> +    GTK events in response to the success/failure of
> +    activity startup using callbacks to the service's 
> +    create call.
>
> s/GTK events/GObject events
>   
Okay.
> +        XXX where is the ActivityFactoryService specific to this
> +        instance created?  That is, what's launching the 
> +        activity-factory scripts?  Is it the 
> +        com.redhat.Sugar.ActivityFactory service?  If so, where
> +        is that defined/registered/created?
>
> DBus activation. When you do a call on a dbus service and the service is
> not active DBus automatically launch the process. We generate the
> service information DBus uses to do this dinamically in
> sugar/activity/bundleregistry.py.
>   
Ah, that's the key piece I was missing.  Thanks.  I've added some docs 
to bundleregistry._ServiceManager to explain some of that.
> +        object_id -- XXX what is this?
>   
...
> +        uri -- XXX what is this?
>   
Updated, thanks.
> +"""Metadata description of a given application/activity
> +
> +The bundle's metadata is normally read from an activity.info 
> +file in order to describe a given bundle (directory).
> +"""
>
> The spec should be referenced there:
> http://wiki.laptop.org/go/Activity_bundles
>   
Okay, have added the link to the spec.
> +        At the moment this requires that something somewhere
> +        have registered a dbus service with the XID of the 
> +        new window that is used to bind the requested activity 
> +        to the window.
>
> In the future the dbus service will not be strictly required. I want to
> be able to launch simple windows in the shell for debugging purposes.
> Still the service(s) will be required by proper activities.
> It would be probably possible to increase compatibility further but
> that's not planned at the moment.
>
> Do you have write access to the sugar git module? Otherwise can you send
> mail to Ivan about it and cc me?
>   
Nope, don't have access yet.  Will email Ivan.

Have fun,
Mike

-- 
________________________________________________
  Mike C. Fletcher
  Designer, VR Plumber, Coder
  http://www.vrplumber.com
  http://blog.vrplumber.com



More information about the Sugar mailing list