From: Vic Lee Date: Fri, 8 Jul 2011 04:01:09 +0000 (+0800) Subject: libfreerdp-utils: add mutex. X-Git-Tag: 1.0-beta1~467^2~1^2^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=322e02d6c539e9a3effc327beafd398fdb2edbbe;p=platform%2Fupstream%2Ffreerdp.git libfreerdp-utils: add mutex. --- diff --git a/include/freerdp/utils/mutex.h b/include/freerdp/utils/mutex.h new file mode 100644 index 0000000..1652bfe --- /dev/null +++ b/include/freerdp/utils/mutex.h @@ -0,0 +1,30 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * Mutex Utils + * + * Copyright 2011 Vic Lee + * + * 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. + */ + +#ifndef __MUTEX_UTILS_H +#define __MUTEX_UTILS_H + +typedef void* freerdp_mutex; + +freerdp_mutex freerdp_mutex_new(void); +void freerdp_mutex_free(freerdp_mutex mutex); +void freerdp_mutex_lock(freerdp_mutex mutex); +void freerdp_mutex_unlock(freerdp_mutex mutex); + +#endif /* __MUTEX_UTILS_H */ diff --git a/libfreerdp-utils/CMakeLists.txt b/libfreerdp-utils/CMakeLists.txt index cde41aa..ad482dc 100644 --- a/libfreerdp-utils/CMakeLists.txt +++ b/libfreerdp-utils/CMakeLists.txt @@ -21,6 +21,7 @@ set(FREERDP_UTILS_SRCS blob.c hexdump.c memory.c + mutex.c semaphore.c stream.c unicode.c) diff --git a/libfreerdp-utils/mutex.c b/libfreerdp-utils/mutex.c new file mode 100644 index 0000000..3b2639a --- /dev/null +++ b/libfreerdp-utils/mutex.c @@ -0,0 +1,77 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * Mutex Utils + * + * Copyright 2011 Vic Lee + * + * 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 +#include + +#if defined _WIN32 + +#include +#define freerdp_mutex_t HANDLE + +#else + +#include +#define freerdp_mutex_t pthread_mutex_t + +#endif + +freerdp_mutex freerdp_mutex_new(void) +{ + freerdp_mutex_t* mutex; + + mutex = (freerdp_mutex_t*)xmalloc(sizeof(freerdp_mutex_t)); + +#if defined _WIN32 + *mutex = CreateMutex(NULL, FALSE, NULL); +#else + pthread_mutex_init(mutex, 0); +#endif + + return mutex; +} + +void freerdp_mutex_free(freerdp_mutex mutex) +{ +#if defined _WIN32 + CloseHandle(*((freerdp_mutex_t*)mutex)); +#else + pthread_mutex_destroy((freerdp_mutex_t*)mutex); +#endif + + xfree(mutex); +} + +void freerdp_mutex_lock(freerdp_mutex mutex) +{ +#if defined _WIN32 + WaitForSingleObject(*((freerdp_mutex_t*)mutex), INFINITE); +#else + pthread_mutex_lock(mutex); +#endif +} + +void freerdp_mutex_unlock(freerdp_mutex mutex) +{ +#if defined _WIN32 + ReleaseMutex(*((freerdp_mutex_t*)mutex)); +#else + pthread_mutex_unlock(mutex); +#endif +}