gtk.IconView random segfault

View: New views
5 Messages — Rating Filter:   Alert me  

gtk.IconView random segfault

by Felipe Reyes-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

hi folks,

I'm writing a software that uses gtk.IconView to show images (my photo
collection, so there are over 1000 pictures), and I'm experimenting
random segfaults with gtk.IconView and I can not figure it out the
reason, please if somebody has some tip on how to debug this.

I added a test case that shows (at least on my system) my trouble.

somebody can give me a clue?

thanks in advance
--
Felipe Reyes Astorga
counter.li.org #316380

[test-iconview.py]

import gtk
import threading
import os
import random

gtk.gdk.threads_init()

rootdir = "/usr/share/pixmaps/faces/"
img = os.listdir(rootdir)

win = gtk.Window()
win.set_size_request(300, 300)
scroll = gtk.ScrolledWindow()
iconview = gtk.IconView()
model = gtk.ListStore(gtk.gdk.Pixbuf, str)

win.add(scroll)
scroll.add_with_viewport(iconview)

iconview.set_model(model)
iconview.set_pixbuf_column(0)
iconview.set_text_column(1)

win.connect("delete-event", gtk.main_quit)

class FillListStore(threading.Thread):
    def run(self):
        model.clear()
        for i in range(600):
            print i
            a = random.randint(0, len(img)-1)
            model.append([gtk.gdk.pixbuf_new_from_file_at_size(rootdir + img[a], 64, 64),
                          str(i)])


thread = FillListStore()
thread.start()
win.show_all()
gtk.main()



_______________________________________________
pygtk mailing list   pygtk@...
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

signature.asc (204 bytes) Download Attachment

Re: gtk.IconView random segfault

by Mitko Haralanov-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Tue, 08 Jul 2008 19:57:23 -0400
Felipe Reyes <felipereyes@...> wrote:

> I added a test case that shows (at least on my system) my trouble.
>
> somebody can give me a clue?

The issue is locking. Changing the code to this seems to have solved
the problem:

class FillListStore(threading.Thread):
    def run(self):
        gtk.gdk.threads_enter ()
        model.clear()
        for i in range(600):
            a = random.randint(0, len(img)-1)
            model.append ([gtk.gdk.pixbuf_new_from_file_at_size(rootdir + img[a], 64, 64),
                           str (i)])
        gtk.gdk.threads_leave ()

thread = FillListStore()
thread.start()
win.show_all()
gtk.gdk.threads_enter ()
gtk.main()
gtk.gdk.threads_leave ()


--
Mitko Haralanov
==========================================
67. Well, _my_ files were backed up.

        --Top 100 things you don't want the sysadmin to say
_______________________________________________
pygtk mailing list   pygtk@...
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Re: gtk.IconView random segfault

by Felipe Reyes-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

El mié, 09-07-2008 a las 16:02 -0700, Mitko Haralanov escribió:

> On Tue, 08 Jul 2008 19:57:23 -0400
> Felipe Reyes <felipereyes@...> wrote:
>
> > I added a test case that shows (at least on my system) my trouble.
> >
> > somebody can give me a clue?
>
> The issue is locking. Changing the code to this seems to have solved
> the problem:
>
> class FillListStore(threading.Thread):
>     def run(self):
>         gtk.gdk.threads_enter ()
>         model.clear()
>         for i in range(600):
>             a = random.randint(0, len(img)-1)
>             model.append
> ([gtk.gdk.pixbuf_new_from_file_at_size(rootdir + img[a], 64, 64),
>                            str (i)])
>         gtk.gdk.threads_leave ()
>
> thread = FillListStore()
> thread.start()
> win.show_all()
> gtk.gdk.threads_enter ()
> gtk.main()
> gtk.gdk.threads_leave ()
>
Yes, with the locks everything works fine, but the locks added some
overhead (about 10 secons when loading 2500 pictures), I suppose that
this is normal, right?

regards,
--
Felipe Reyes Astorga
counter.li.org #316380


_______________________________________________
pygtk mailing list   pygtk@...
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

signature.asc (204 bytes) Download Attachment

Re: gtk.IconView random segfault

by Mitko Haralanov-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, 09 Jul 2008 19:41:31 -0400
Felipe Reyes <felipereyes@...> wrote:

> Yes, with the locks everything works fine, but the locks added some
> overhead (about 10 secons when loading 2500 pictures), I suppose that
> this is normal, right?

I guess it is possible for the locking to add overhead since the entire
gtk uses one master lock.
Also, are you sure that it's the locks? Have you been able to load all
2500 images before without segfaults so you can measure the time?
The alternative would be to not use a separate thread for loading the
model.

--
Mitko Haralanov
==========================================
Everybody needs a little love sometime; stop hacking and fall in love!
_______________________________________________
pygtk mailing list   pygtk@...
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Re: gtk.IconView random segfault

by Felipe Reyes-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

El mié, 09-07-2008 a las 17:08 -0700, Mitko Haralanov escribió:
> On Wed, 09 Jul 2008 19:41:31 -0400
> I guess it is possible for the locking to add overhead since the entire
> gtk uses one master lock.
> Also, are you sure that it's the locks? Have you been able to load all
> 2500 images before without segfaults so you can measure the time?
> The alternative would be to not use a separate thread for loading the
> model.
yes, I could load the images without segfaults and without locks, but
just a few times, and now with the locks doesn't segfault.

I don't want to use the main thread to load the model, because it will
give the sensation of a hangup application, because there are to many
images, so I will have to live with the overhead produced by the
locks :)

thanks again.
regards,
--
Felipe Reyes Astorga
counter.li.org #316380


_______________________________________________
pygtk mailing list   pygtk@...
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

signature.asc (204 bytes) Download Attachment