Hi,I'm developing^Whacking on a Gtk application [1] which uses PyGObject since a few months now. It's a client for the Music Player Daemon (mpd).
Suddenly yesterday, I couldn't run it anymore: when I start it, the application initialization at the very beginning is alright, Gtk.Appliction "activate" signal is triggered and answered as usual, and then, everything hangs. *Something* get stuck *somewhere* and I can't run the application anymore... I tried to put aside all the things that would come up to my mind, which were: I didn't updated any libraries on my system, I stashed my current changes, I switched back the application to master, "git clean -fdx"'d it, switched off the player daemon, even restarted my computer in case a socket or another daemon was off somewhere, and I quickly patched threading.Thread(), threading.Condition() and GLib.idle_add() so they are just stubs so remove potentially blocking things.
I was just trying a new piece of code (which I reverted since then) and I'm pretty sure I restarted the application just a couple of hours before without any troubles. I used to do it several times a day for weeks, and now, I'm really confused.
So I fired up gdb and had a look at the result (see the attached file), and I would say the application is stuck waiting for gdk_threads_dispatch() to return (which seems to be waiting to get a lock) in the main thread (#1) (There's another thread, waiting for a Condition to be released, but I'm pretty sure it's not the faulty code since 1. it's in another thread, and 2. it still hangs even if I remove this code).
There are probably tons of places where the application abuses Gtk, threads and stuff, and we are trying to sort things out one at a time, but it used to work OK until now, when I don't have anything anymore.
How can I get a clue on what's happening? I don't know where to look know, and I'm as stuck as my application :(
Any tips appreciated, Jonathan [1]: https://github.com/multani/sonata
Attachment:
stacktrace-sonata-stuck.txt.gz
Description: GNU Zip compressed data