Skip to content

Commit e040829

Browse files
committed
session server REFACTOR rwlock init attr refactor
1 parent ee0071f commit e040829

File tree

1 file changed

+44
-26
lines changed

1 file changed

+44
-26
lines changed

src/session_server.c

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -822,42 +822,63 @@ nc_server_keylog_file_open(void)
822822

823823
#endif
824824

825-
API int
826-
nc_server_init(void)
825+
/**
826+
* @brief Initialize a rwlock.
827+
*
828+
* @param[in] rwlock RW lock to initialize.
829+
* @return errno.
830+
*/
831+
static int
832+
nc_server_init_rwlock(pthread_rwlock_t *rwlock)
827833
{
828-
pthread_rwlockattr_t *attr_p = NULL;
829-
int r;
830-
831-
ATOMIC_STORE_RELAXED(server_opts.new_session_id, 1);
832-
ATOMIC_STORE_RELAXED(server_opts.new_client_id, 1);
833-
834834
#ifdef HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP
835+
int rc = 0;
835836
pthread_rwlockattr_t attr;
836837

837-
if ((r = pthread_rwlockattr_init(&attr))) {
838-
ERR(NULL, "%s: failed init attribute (%s).", __func__, strerror(r));
839-
goto error;
838+
if ((rc = pthread_rwlockattr_init(&attr))) {
839+
ERR(NULL, "%s: failed to init attribute (%s).", __func__, strerror(rc));
840+
return rc;
840841
}
841-
attr_p = &attr;
842-
if ((r = pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP))) {
843-
ERR(NULL, "%s: failed set attribute (%s).", __func__, strerror(r));
844-
goto error;
842+
843+
if ((rc = pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP))) {
844+
ERR(NULL, "%s: failed to set attribute (%s).", __func__, strerror(rc));
845+
goto cleanup;
846+
}
847+
848+
if ((rc = pthread_rwlock_init(rwlock, &attr))) {
849+
ERR(NULL, "%s: failed to init rwlock (%s).", __func__, strerror(rc));
850+
goto cleanup;
851+
}
852+
853+
cleanup:
854+
pthread_rwlockattr_destroy(&attr);
855+
return rc;
856+
#else
857+
int rc = 0;
858+
859+
if ((rc = pthread_rwlock_init(rwlock, NULL))) {
860+
ERR(NULL, "%s: failed to init rwlock (%s).", __func__, strerror(rc));
845861
}
862+
863+
return rc;
846864
#endif
865+
}
847866

848-
if ((r = pthread_rwlock_init(&server_opts.config_lock, attr_p))) {
849-
ERR(NULL, "%s: failed to init rwlock(%s).", __func__, strerror(r));
867+
API int
868+
nc_server_init(void)
869+
{
870+
int r;
871+
872+
ATOMIC_STORE_RELAXED(server_opts.new_session_id, 1);
873+
ATOMIC_STORE_RELAXED(server_opts.new_client_id, 1);
874+
875+
if (nc_server_init_rwlock(&server_opts.config_lock)) {
850876
goto error;
851877
}
852-
if ((r = pthread_rwlock_init(&server_opts.ch_client_lock, attr_p))) {
853-
ERR(NULL, "%s: failed to init rwlock(%s).", __func__, strerror(r));
878+
if (nc_server_init_rwlock(&server_opts.ch_client_lock)) {
854879
goto error;
855880
}
856881

857-
if (attr_p) {
858-
pthread_rwlockattr_destroy(attr_p);
859-
}
860-
861882
#ifdef NC_ENABLED_SSH_TLS
862883
if (curl_global_init(CURL_GLOBAL_SSL | CURL_GLOBAL_ACK_EINTR)) {
863884
ERR(NULL, "%s: failed to init CURL.", __func__);
@@ -898,9 +919,6 @@ nc_server_init(void)
898919
return 0;
899920

900921
error:
901-
if (attr_p) {
902-
pthread_rwlockattr_destroy(attr_p);
903-
}
904922
return -1;
905923
}
906924

0 commit comments

Comments
 (0)