Your application used to be single threaded and is consuming a resource that is not thread-safe. You’re splitting your application up into two or more threads. Both threads want to consume the non-thread-safe resource.
In this GNOME-Live item I explain how to use GThreadPool for this.
It’s a wiki so if you find any discrepancies in the sample and or text, just correct them. I’m subscribed so I’ll review it that way.
The GNOME-Live item is done in a similar way to the item about using asynchronous DBus bindings and the AsyncWorker item.