1
0
mirror of https://github.com/lammertb/libhttp.git synced 2025-08-07 16:02:55 +03:00

Made httplib_pthread_mutex_trylock public

This commit is contained in:
Lammert Bies
2016-12-19 15:37:28 +01:00
parent 32af4a5d21
commit 9942cfd38d
5 changed files with 49 additions and 10 deletions

View File

@@ -384,7 +384,7 @@ OBJLIST = \
${OBJDIR}win32_pthread_mutex_destroy${OBJEXT} \
${OBJDIR}win32_pthread_mutex_init${OBJEXT} \
${OBJDIR}win32_pthread_mutex_lock${OBJEXT} \
${OBJDIR}win32_pthread_mutex_trylock${OBJEXT} \
${OBJDIR}httplib_pthread_mutex_trylock${OBJEXT} \
${OBJDIR}httplib_pthread_mutex_unlock${OBJEXT} \
${OBJDIR}httplib_pthread_self${OBJEXT} \
${OBJDIR}httplib_pthread_setspecific${OBJEXT} \
@@ -1451,8 +1451,7 @@ ${OBJDIR}win32_pthread_mutex_lock${OBJEXT} : ${SRCDIR}win32_pthread_mutex_loc
${SRCDIR}httplib_main.h \
${INCDIR}libhttp.h
${OBJDIR}win32_pthread_mutex_trylock${OBJEXT} : ${SRCDIR}win32_pthread_mutex_trylock.c \
${SRCDIR}httplib_pthread.h \
${OBJDIR}httplib_pthread_mutex_trylock${OBJEXT} : ${SRCDIR}httplib_pthread_mutex_trylock.c \
${SRCDIR}httplib_main.h \
${INCDIR}libhttp.h

View File

@@ -0,0 +1,29 @@
# LibHTTP API Reference
### `httplib_pthread_mutex_trylock( mutex );`
### Parameters
| Parameter | Type | Description |
| :--- | :--- | :--- |
|**`mutex`**|`pthread_mutex_t`|The key to the mutex to try to lock|
### Return Value
| Type | Description |
| :--- | :--- |
|`int`|Integer value with the result of the function|
### Description
The platform independent function `httplib_pthread_mutex_trylock()` is used to try to lock a mutex. The function returns **0** if this is succesful, or an error code if it fails. Depending on the error code the parameter my be invalid, or the mutex is already locked. On systems which support it, this function is implemented as a direct call to `pthread_mutex_trylock()`. On other systems own code is used to emulate the same functionality.
### See Also
* [`httplib_pthread_mutex_destroy();`](httplib_pthread_mutex_destroy.md)
* [`httplib_pthread_mutex_init();`](httplib_pthread_mutex_init.md)
* [`httplib_pthread_mutex_lock();`](httplib_pthread_mutex_lock.md)
* [`httplib_pthread_mutex_unlock();`](httplib_pthread_mutex_unlock.md)
* [`httplib_pthread_getspecific();`](httplib_pthread_getspecific.md)
* [`httplib_pthread_self();`](httplib_pthread_self.md)

View File

@@ -985,6 +985,7 @@ LIBHTTP_API int httplib_kill( pid_t pid, int sig_num );
LIBHTTP_API int httplib_mkdir( const char *path, int mode );
LIBHTTP_API DIR * httplib_opendir( const char *name );
LIBHTTP_API int httplib_poll( struct pollfd *pfd, unsigned int nfds, int timeout );
LIBHTTP_API int httplib_pthread_mutex_trylock( pthread_mutex_t *mutex );
LIBHTTP_API int httplib_pthread_mutex_unlock( pthread_mutex_t *mutex );
LIBHTTP_API pthread_t httplib_pthread_self( void );
LIBHTTP_API int httplib_pthread_setspecific( pthread_key_t key, const void *value );

View File

@@ -43,7 +43,6 @@ int pthread_key_delete( pthread_key_t key );
int pthread_mutex_destroy( pthread_mutex_t *mutex );
int pthread_mutex_init( pthread_mutex_t *mutex, void *unused );
int pthread_mutex_lock( pthread_mutex_t *mutex );
int pthread_mutex_trylock( pthread_mutex_t *mutex );
void * pthread_getspecific( pthread_key_t key );

View File

@@ -22,16 +22,23 @@
* THE SOFTWARE.
*
* ============
* Release: 1.8
* Release: 2.0
*/
#include "httplib_main.h"
#include "httplib_pthread.h"
/*
* The platform independent function httplib_pthread_mutex_trylock() tries to
* put a lock on a mutex. It checks the state of the mutex and returns a value
* accordingly. On systems which support it, this function is just a wrapper
* around pthread_mutex_trylock(). On other systems the functionality is
* emulated with own code.
*/
int httplib_pthread_mutex_trylock( pthread_mutex_t *mutex ) {
#if defined(_WIN32)
int pthread_mutex_trylock( pthread_mutex_t *mutex ) {
switch ( WaitForSingleObject( *mutex, 0 ) ) {
case WAIT_OBJECT_0: return 0;
@@ -39,6 +46,10 @@ int pthread_mutex_trylock( pthread_mutex_t *mutex ) {
}
return -1;
} /* pthread_mutex_trylock */
#else /* _WIN32 */
#endif /* _WIN32 */
return pthread_mutex_trylock( mutex );
#endif /* _WIN32 */
} /* httplib_pthread_mutex_trylock */