diff -up libsoup-2.56.0/libsoup/soup-session.c.crash-under-soup_socket_new libsoup-2.56.0/libsoup/soup-session.c --- libsoup-2.56.0/libsoup/soup-session.c.crash-under-soup_socket_new 2016-09-16 17:14:27.000000000 +0200 +++ libsoup-2.56.0/libsoup/soup-session.c 2017-11-15 17:20:52.660392432 +0100 @@ -369,6 +369,7 @@ soup_session_finalize (GObject *object) G_OBJECT_CLASS (soup_session_parent_class)->finalize (object); } +/* requires conn_lock */ static void ensure_socket_props (SoupSession *session) { @@ -784,11 +785,13 @@ soup_session_set_property (GObject *obje break; } + g_mutex_lock (&priv->conn_lock); if (priv->socket_props && socket_props_changed) { soup_socket_properties_unref (priv->socket_props); priv->socket_props = NULL; ensure_socket_props (session); } + g_mutex_unlock (&priv->conn_lock); } static void @@ -808,7 +811,9 @@ soup_session_get_property (GObject *obje g_value_set_boxed (value, priv->proxy_uri); break; case PROP_PROXY_RESOLVER: + g_mutex_lock (&priv->conn_lock); ensure_socket_props (session); + g_mutex_unlock (&priv->conn_lock); g_value_set_object (value, priv->proxy_resolver); break; case PROP_MAX_CONNS: @@ -829,12 +834,16 @@ soup_session_get_property (GObject *obje break; case PROP_SSL_USE_SYSTEM_CA_FILE: tlsdb = g_tls_backend_get_default_database (g_tls_backend_get_default ()); + g_mutex_lock (&priv->conn_lock); ensure_socket_props (session); + g_mutex_unlock (&priv->conn_lock); g_value_set_boolean (value, priv->tlsdb == tlsdb); g_clear_object (&tlsdb); break; case PROP_TLS_DATABASE: + g_mutex_lock (&priv->conn_lock); ensure_socket_props (session); + g_mutex_unlock (&priv->conn_lock); g_value_set_object (value, priv->tlsdb); break; case PROP_TLS_INTERACTION: