LCOV - code coverage report
Current view: directory - src/shared/platform/posix - lock.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 32 20 62.5 %
Date: 2014-06-18 Functions: 0 0 -

       1                 : /*
       2                 :  * Copyright (c) 2012 The Native Client Authors. All rights reserved.
       3                 :  * Use of this source code is governed by a BSD-style license that can be
       4                 :  * found in the LICENSE file.
       5                 :  */
       6                 : 
       7                 : 
       8                 : #include <pthread.h>
       9                 : #include <errno.h>
      10                 : #include "native_client/src/include/nacl_macros.h"
      11                 : #include "native_client/src/shared/platform/nacl_sync.h"
      12                 : 
      13           47259 : int NaClMutexCtor(struct NaClMutex *mp) {
      14           47259 :   if (0 != pthread_mutex_init(&mp->mu, (pthread_mutexattr_t *) 0)) {
      15               0 :     return 0;
      16                 :   }
      17           47259 :   return 1;
      18           47259 : }
      19                 : 
      20           42320 : void NaClMutexDtor(struct NaClMutex *mp) {
      21           42320 :   pthread_mutex_destroy(&mp->mu);
      22           42320 : }
      23                 : 
      24                 : #define MAP(E, S) case E: do { return S; } while (0)
      25                 : 
      26        12782718 : NaClSyncStatus NaClMutexLock(struct NaClMutex *mp) {
      27        12782718 :   switch (pthread_mutex_lock(&mp->mu)) {
      28        25565286 :     MAP(0, NACL_SYNC_OK);
      29               0 :     MAP(EINVAL, NACL_SYNC_MUTEX_INVALID);
      30                 :     /* no EAGAIN; we don't support recursive mutexes */
      31               0 :     MAP(EDEADLK, NACL_SYNC_MUTEX_DEADLOCK);
      32               0 :   }
      33               0 :   return NACL_SYNC_INTERNAL_ERROR;
      34        12782615 : }
      35                 : 
      36               4 : NaClSyncStatus NaClMutexTryLock(struct NaClMutex *mp) {
      37               4 :   switch (pthread_mutex_trylock(&mp->mu)) {
      38               4 :     MAP(0, NACL_SYNC_OK);
      39               0 :     MAP(EINVAL, NACL_SYNC_MUTEX_INVALID);
      40               4 :     MAP(EBUSY, NACL_SYNC_BUSY);
      41                 :     /* no EAGAIN; we don't support recursive mutexes */
      42               0 :   }
      43               0 :   return NACL_SYNC_INTERNAL_ERROR;
      44               4 : }
      45                 : 
      46        12782887 : NaClSyncStatus NaClMutexUnlock(struct NaClMutex *mp) {
      47        12782887 :   switch (pthread_mutex_unlock(&mp->mu)) {
      48        25565611 :     MAP(0, NACL_SYNC_OK);
      49               0 :     MAP(EINVAL, NACL_SYNC_MUTEX_INVALID);
      50               0 :     MAP(EPERM, NACL_SYNC_MUTEX_PERMISSION);
      51               0 :   }
      52               0 :   return NACL_SYNC_INTERNAL_ERROR;
      53        12782789 : }

Generated by: LCOV version 1.7