QConnmanEngine must not store the constructed QNetworkSessionPrivateImpl instance. QNetworkSessionPrivateImpl is the private class associated with the public QNetworkSession. There is a one-to-one mapping of instances of each. createSessionBackend() is called by QNetworkSession to create a backend specific instance for the backend associated with the QNetworkConfiguration in use by the QNetworkSession.

There is no guarantee that networkSessionPrivateImpl will still be valid - QNetworkSession will delete it on destruction, networkSessionPrivateImpl will become a dangling pointer. The following code is likely to cause a segmentation fault due to the second object accessing the invalid networkSessionPrivateImpl:

```
delete new QNetworkSession(config)
new QNetworkSession(config)
```

networkSessionPrivateImpl will be in the same thread as the first QNetworkSession which calls createSessionBackend(). This is not necessarily the same thread as QConnmanEngine or any subsequent QNetworkSession instances.

If two or more QNetworkSession instances are created they will share the single networkSessionPrivateImpl instance. Which means the following code snippet will connect to the wrong network.

```
QNetworkSession sessionOne(config1);
QNetwrokSession sessionTwo(config2);

// will erroneously connect to config2 because sessionTwo constructor above assigns
// config2 to shared networkSessionPrivateImpl d pointer.
sessionOne.open();
```