X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Fsasl.cc;h=32906cc8a8858e82056d8b87c822afd53147be0f;hb=51e9a13e51848f89341656f288d2c7f20276b344;hp=f1de41eaec4fe30f86416da7714f625e169c0ba6;hpb=58c279d58e2a44562f729e93e301dfedf42f530b;p=awesomized%2Flibmemcached diff --git a/libmemcached/sasl.cc b/libmemcached/sasl.cc index f1de41ea..32906cc8 100644 --- a/libmemcached/sasl.cc +++ b/libmemcached/sasl.cc @@ -98,12 +98,15 @@ static memcached_return_t resolve_names(memcached_server_st& server, char *laddr return MEMCACHED_SUCCESS; } +extern "C" { + static void sasl_shutdown_function() { sasl_done(); } -static int sasl_startup_state= SASL_OK; +static volatile int sasl_startup_state= SASL_OK; +pthread_mutex_t sasl_startup_state_LOCK= PTHREAD_MUTEX_INITIALIZER; static pthread_once_t sasl_startup_once= PTHREAD_ONCE_INIT; static void sasl_startup_function(void) { @@ -115,6 +118,8 @@ static void sasl_startup_function(void) } } +} // extern "C" + memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *server) { if (LIBMEMCACHED_WITH_SASL_SUPPORT == 0) @@ -182,12 +187,14 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s return memcached_set_errno(*server, pthread_error, MEMCACHED_AT); } + (void)pthread_mutex_lock(&sasl_startup_state_LOCK); if (sasl_startup_state != SASL_OK) { const char *sasl_error_msg= sasl_errstring(sasl_startup_state, NULL, NULL); return memcached_set_error(*server, MEMCACHED_AUTH_PROBLEM, MEMCACHED_AT, memcached_string_make_from_cstr(sasl_error_msg)); } + (void)pthread_mutex_unlock(&sasl_startup_state_LOCK); sasl_conn_t *conn; int ret; @@ -224,9 +231,9 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s struct libmemcached_io_vector_st vector[]= { - { sizeof(request.bytes), request.bytes }, - { keylen, chosenmech }, - { len, data } + { request.bytes, sizeof(request.bytes) }, + { chosenmech, keylen }, + { data, len } }; if (memcached_io_writev(server, vector, 3, true) == -1)