}
static int data_index = -1;
+#ifdef TIZEN_EXT
+G_LOCK_DEFINE_STATIC(data_index);
+#define DATA_INDEX_LOCK(m) G_LOCK(m)
+#define DATA_INDEX_UNLOCK(m) G_UNLOCK(m)
+#else
+#define DATA_INDEX_LOCK(m)
+#define DATA_INDEX_UNLOCK(m)
+#endif
static int
retrieve_certificate (SSL *ssl,
GTlsCertificate *cert;
gboolean set_certificate = FALSE;
+ DATA_INDEX_LOCK(data_index);
+ int idx = data_index;
client = SSL_get_ex_data (ssl, data_index);
+ DATA_INDEX_UNLOCK(data_index);
+ if (!client)
+ {
+ TIZEN_LOGE("SSL_get_ex_data(%p) returns NULL.", ssl);
+ return 0;
+ }
+
tls = G_TLS_CONNECTION_BASE (client);
openssl = G_TLS_CONNECTION_OPENSSL (client);
priv = g_tls_client_connection_openssl_get_instance_private (client);
TIZEN_LOGI("ssl[%p] client[%p] tls[%p] openssl[%p] priv[%p] data_index[%d]",
- ssl, client, tls, openssl, priv, data_index);
+ ssl, client, tls, openssl, priv, idx);
tls->certificate_requested = TRUE;
GTlsClientConnectionOpensslPrivate *priv;
int len;
+ DATA_INDEX_LOCK(data_index);
+ int idx = data_index;
client = SSL_get_ex_data (ssl, data_index);
+ DATA_INDEX_UNLOCK(data_index);
priv = g_tls_client_connection_openssl_get_instance_private (client);
TIZEN_LOGI("ssl[%p] client[%p] priv[%p] data_index[%d]",
- ssl, client, priv, data_index);
+ ssl, client, priv, idx);
len = MIN (*id_len, g_bytes_get_size (priv->session_id));
memcpy (id, g_bytes_get_data (priv->session_id, NULL), len);
ERR_error_string (ERR_get_error (), NULL));
return FALSE;
}
-
+ DATA_INDEX_LOCK(data_index);
if (data_index == -1) {
data_index = SSL_get_ex_new_index (0, (void *)"gtlsclientconnection", NULL, NULL, NULL);
TIZEN_LOGI("new data_index[%d]", data_index);
}
SSL_set_ex_data (priv->ssl, data_index, client);
TIZEN_LOGI("[SSL] set extra data: priv->ssl[%p] data_index[%d] client[%p]", priv->ssl, data_index, client);
-
+ DATA_INDEX_UNLOCK(data_index);
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
if (hostname)
SSL_set_tlsext_host_name (priv->ssl, hostname);