LCOV - code coverage report
Current view: directory - src/shared/platform/posix - lock.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 25 16 64.0 %
Date: 2014-10-23 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          104966 : int NaClMutexCtor(struct NaClMutex *mp) {
      14          104966 :   if (0 != pthread_mutex_init(&mp->mu, (pthread_mutexattr_t *) 0)) {
      15               0 :     return 0;
      16                 :   }
      17          104966 :   return 1;
      18                 : }
      19                 : 
      20          100387 : void NaClMutexDtor(struct NaClMutex *mp) {
      21          100387 :   pthread_mutex_destroy(&mp->mu);
      22          100386 : }
      23                 : 
      24                 : #define MAP(E, S) case E: do { return S; } while (0)
      25                 : 
      26        13694004 : NaClSyncStatus NaClMutexLock(struct NaClMutex *mp) {
      27        13694004 :   switch (pthread_mutex_lock(&mp->mu)) {
      28        13704446 :     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                 :   }
      33               0 :   return NACL_SYNC_INTERNAL_ERROR;
      34                 : }
      35                 : 
      36               4 : NaClSyncStatus NaClMutexTryLock(struct NaClMutex *mp) {
      37               4 :   switch (pthread_mutex_trylock(&mp->mu)) {
      38               2 :     MAP(0, NACL_SYNC_OK);
      39               0 :     MAP(EINVAL, NACL_SYNC_MUTEX_INVALID);
      40               2 :     MAP(EBUSY, NACL_SYNC_BUSY);
      41                 :     /* no EAGAIN; we don't support recursive mutexes */
      42                 :   }
      43               0 :   return NACL_SYNC_INTERNAL_ERROR;
      44                 : }
      45                 : 
      46        13699560 : NaClSyncStatus NaClMutexUnlock(struct NaClMutex *mp) {
      47        13699560 :   switch (pthread_mutex_unlock(&mp->mu)) {
      48        13702005 :     MAP(0, NACL_SYNC_OK);
      49               0 :     MAP(EINVAL, NACL_SYNC_MUTEX_INVALID);
      50               0 :     MAP(EPERM, NACL_SYNC_MUTEX_PERMISSION);
      51                 :   }
      52               0 :   return NACL_SYNC_INTERNAL_ERROR;
      53                 : }

Generated by: LCOV version 1.7