I have identified 2 possible scenarios so far. #1 is when we create a connection and specify extensions, then the segfault seems to happen in the extension.
dispatcher(const xpp::shape::extension & extension)
: dispatcher(extension->first_error) <--- this line
{}
If no extensions are specified, the segfault happens because the connection objects tries to fetch the root screen, without checking for a successful connection first.
The second segfault is pretty simple to fix, but the first one requires more c++ skills than I currently have :)