| #include "xmlrpc_config.h" |
|
|
| |
| |
| |
| |
| |
| #define WIN32_WIN_LEAN_AND_MEAN |
| #include <windows.h> |
|
|
| #include "mallocvar.h" |
|
|
| #include "xmlrpc-c/lock.h" |
|
|
| #include "xmlrpc-c/lock_windows.h" |
|
|
| static lockAcquireFn acquire; |
|
|
| static void |
| acquire(struct lock * lockP) { |
|
|
| CRITICAL_SECTION * const criticalSectionP = lockP->implementationP; |
|
|
| EnterCriticalSection(criticalSectionP); |
| } |
|
|
|
|
|
|
| static lockReleaseFn release; |
|
|
| static void |
| release(struct lock * lockP) { |
|
|
| CRITICAL_SECTION * const criticalSectionP = lockP->implementationP; |
|
|
| LeaveCriticalSection(criticalSectionP); |
| } |
|
|
|
|
|
|
| static lockDestroyFn destroy; |
|
|
| static void |
| destroy(struct lock * const lockP) { |
|
|
| CRITICAL_SECTION * const criticalSectionP = lockP->implementationP; |
|
|
| DeleteCriticalSection(criticalSectionP); |
|
|
| free(criticalSectionP); |
|
|
| free(lockP); |
| } |
|
|
|
|
|
|
| struct lock * |
| xmlrpc_lock_create_windows(void) { |
|
|
| struct lock * lockP; |
|
|
| MALLOCVAR(lockP); |
|
|
| if (lockP) { |
| CRITICAL_SECTION * criticalSectionP; |
|
|
| MALLOCVAR(criticalSectionP); |
|
|
| if (criticalSectionP) { |
| InitializeCriticalSection(criticalSectionP); |
|
|
| lockP->implementationP = criticalSectionP; |
| lockP->acquire = &acquire; |
| lockP->release = &release; |
| lockP->destroy = &destroy; |
| } else { |
| free(lockP); |
| lockP = NULL; |
| } |
| } |
| return lockP; |
| } |
|
|
|
|
|
|
|
|