GUPnP FAQ
Is GUPnP thread-safe?
No. All interaction with GUPnP has to happen from one thread. You may, however, create a dedicated GUPnP worker thread with it's own GMainContext and GMainLoop and push the main context before any interaction with GUPnP using g_main_context_push_thread_default ().
Autoconnecting signals does not work with C++ code
The C++ compiler applies name mangling to the (exported) symbols so the lookup mechanism can't find them. Wrapping the callbacks into extern "C" { } block disables name mangling and should make the auto-connecting work.