diff options
author | HyungKyu Song <hk76.song@samsung.com> | 2013-02-16 19:06:08 +0900 |
---|---|---|
committer | HyungKyu Song <hk76.song@samsung.com> | 2013-02-16 19:06:08 +0900 |
commit | 2fe4ba6f7e660a945ed94559110c76852c5edd47 (patch) | |
tree | 1c3b126230f27c8e1451b5669a2e7f760be29fe1 /common/ctsvc_mutex.c | |
parent | a1311c9da85162a82223c73aa63e6c9b7d91c565 (diff) | |
download | contacts-service-2fe4ba6f7e660a945ed94559110c76852c5edd47.tar.gz contacts-service-2fe4ba6f7e660a945ed94559110c76852c5edd47.tar.bz2 contacts-service-2fe4ba6f7e660a945ed94559110c76852c5edd47.zip |
Tizen 2.0 Releasesubmit/tizen_2.0/20130216.100704accepted/tizen_2.0/20130216.0940012.0_releasetizen_2.0
Diffstat (limited to 'common/ctsvc_mutex.c')
-rwxr-xr-x | common/ctsvc_mutex.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/common/ctsvc_mutex.c b/common/ctsvc_mutex.c new file mode 100755 index 0000000..bf7d8fd --- /dev/null +++ b/common/ctsvc_mutex.c @@ -0,0 +1,97 @@ +/* + * Contacts Service + * + * Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Youngjae Shin <yj99.shin@samsung.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include <pthread.h> + +#include "contacts.h" +#include "ctsvc_internal.h" +#include "ctsvc_mutex.h" + +typedef struct { + int (* lock) (pthread_mutex_t *mutex); + int (* unlock) (pthread_mutex_t *mutex); +}cts_mutex_fns; + +static cts_mutex_fns cts_mutex_funtions = +{ + pthread_mutex_lock, + pthread_mutex_unlock +}; + +static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t sockfd_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t trans_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t ipc_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t ipc_pubsub_mutex = PTHREAD_MUTEX_INITIALIZER; + +static inline pthread_mutex_t* cts_mutex_get_mutex(int type) +{ + pthread_mutex_t *ret_val; + + switch (type) { + case CTS_MUTEX_CONNECTION: + ret_val = &conn_mutex; + break; + case CTS_MUTEX_SOCKET_FD: + ret_val = &sockfd_mutex; + break; + case CTS_MUTEX_TRANSACTION: + ret_val = &trans_mutex; + break; + case CTS_MUTEX_PIMS_IPC_CALL: + ret_val = &ipc_mutex; + break; + case CTS_MUTEX_PIMS_IPC_PUBSUB: + ret_val = &ipc_pubsub_mutex; + break; + default: + CTS_ERR("unknown type(%d)", type); + ret_val = NULL; + break; + } + return ret_val; +} + +void ctsvc_mutex_lock(int type) +{ + int ret; + pthread_mutex_t *mutex; + + mutex = cts_mutex_get_mutex(type); + + if (cts_mutex_funtions.lock) { + ret = cts_mutex_funtions.lock(mutex); + WARN_IF(ret, "mutex_lock Failed(%d)", ret); + } +} + +void ctsvc_mutex_unlock(int type) +{ + int ret; + pthread_mutex_t *mutex; + + mutex = cts_mutex_get_mutex(type); + + if (cts_mutex_funtions.unlock) { + ret = cts_mutex_funtions.unlock(mutex); + WARN_IF(ret, "mutex_unlock Failed(%d)", ret); + } +} + |