LCOV - code coverage report
Current view: directory - src/trusted/desc - nacl_desc_mutex.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 36 0 0.0 %
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                 :  * NaCl Service Runtime.  Mutex Descriptor / Handle abstraction.
       9                 :  */
      10                 : 
      11                 : #include "native_client/src/include/portability.h"
      12                 : 
      13                 : #include <stdlib.h>
      14                 : #include <string.h>
      15                 : 
      16                 : #include "native_client/src/shared/imc/nacl_imc_c.h"
      17                 : #include "native_client/src/trusted/desc/nacl_desc_base.h"
      18                 : #include "native_client/src/trusted/desc/nacl_desc_mutex.h"
      19                 : 
      20                 : #include "native_client/src/shared/platform/nacl_host_desc.h"
      21                 : #include "native_client/src/shared/platform/nacl_log.h"
      22                 : #include "native_client/src/shared/platform/nacl_interruptible_mutex.h"
      23                 : 
      24                 : #include "native_client/src/trusted/service_runtime/nacl_config.h"
      25                 : #include "native_client/src/trusted/service_runtime/internal_errno.h"
      26                 : 
      27                 : #include "native_client/src/trusted/service_runtime/include/bits/mman.h"
      28                 : #include "native_client/src/trusted/service_runtime/include/sys/errno.h"
      29                 : #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
      30                 : #include "native_client/src/trusted/service_runtime/include/sys/stat.h"
      31                 : 
      32                 : /*
      33                 :  * This file contains the implementation for the NaClDescMutex subclass
      34                 :  * of NaClDesc.
      35                 :  *
      36                 :  * NaClDescMutex is the subclass that wraps host-OS mutex abstractions
      37                 :  */
      38                 : 
      39                 : static struct NaClDescVtbl const kNaClDescMutexVtbl;  /* fwd */
      40                 : 
      41                 : /*
      42                 :  * Takes ownership of hd, will close in Dtor.
      43                 :  */
      44               0 : int NaClDescMutexCtor(struct NaClDescMutex  *self) {
      45               0 :   struct NaClDesc *basep = (struct NaClDesc *) self;
      46                 : 
      47               0 :   basep->base.vtbl = (struct NaClRefCountVtbl const *) NULL;
      48               0 :   if (!NaClDescCtor(basep)) {
      49               0 :     return 0;
      50                 :   }
      51               0 :   if (!NaClIntrMutexCtor(&self->mu)) {
      52               0 :     (*basep->base.vtbl->Dtor)(&basep->base);
      53               0 :     return 0;
      54                 :   }
      55                 : 
      56               0 :   basep->base.vtbl = (struct NaClRefCountVtbl const *) &kNaClDescMutexVtbl;
      57               0 :   return 1;
      58               0 : }
      59                 : 
      60               0 : static void NaClDescMutexDtor(struct NaClRefCount *vself) {
      61               0 :   struct NaClDescMutex *self = (struct NaClDescMutex *) vself;
      62                 : 
      63               0 :   NaClLog(4, "NaClDescMutexDtor(0x%08"NACL_PRIxPTR").\n",
      64                 :           (uintptr_t) vself);
      65               0 :   NaClIntrMutexDtor(&self->mu);
      66               0 :   vself->vtbl = (struct NaClRefCountVtbl const *) &kNaClDescVtbl;
      67               0 :   (*vself->vtbl->Dtor)(vself);
      68               0 : }
      69                 : 
      70               0 : static int NaClDescMutexFstat(struct NaClDesc          *vself,
      71               0 :                               struct nacl_abi_stat     *statbuf) {
      72               0 :   UNREFERENCED_PARAMETER(vself);
      73                 : 
      74               0 :   memset(statbuf, 0, sizeof *statbuf);
      75               0 :   statbuf->nacl_abi_st_mode = NACL_ABI_S_IFMUTEX;
      76               0 :   return 0;
      77                 : }
      78                 : 
      79               0 : static int NaClDescMutexLock(struct NaClDesc         *vself) {
      80               0 :   struct NaClDescMutex *self = (struct NaClDescMutex *) vself;
      81                 : 
      82               0 :   NaClSyncStatus status = NaClIntrMutexLock(&self->mu);
      83                 : 
      84               0 :   return -NaClXlateNaClSyncStatus(status);
      85                 : }
      86                 : 
      87               0 : static int NaClDescMutexTryLock(struct NaClDesc          *vself) {
      88               0 :   struct NaClDescMutex *self = (struct NaClDescMutex *) vself;
      89                 : 
      90               0 :   NaClSyncStatus status = NaClIntrMutexTryLock(&self->mu);
      91                 : 
      92               0 :   return -NaClXlateNaClSyncStatus(status);
      93                 : }
      94                 : 
      95               0 : static int NaClDescMutexUnlock(struct NaClDesc         *vself) {
      96               0 :   struct NaClDescMutex *self = (struct NaClDescMutex *) vself;
      97                 : 
      98               0 :   NaClSyncStatus status = NaClIntrMutexUnlock(&self->mu);
      99                 : 
     100               0 :   return -NaClXlateNaClSyncStatus(status);
     101                 : }
     102                 : 
     103                 : static struct NaClDescVtbl const kNaClDescMutexVtbl = {
     104                 :   {
     105                 :     NaClDescMutexDtor,
     106                 :   },
     107                 :   NaClDescMapNotImplemented,
     108                 :   NACL_DESC_UNMAP_NOT_IMPLEMENTED
     109                 :   NaClDescReadNotImplemented,
     110                 :   NaClDescWriteNotImplemented,
     111                 :   NaClDescSeekNotImplemented,
     112                 :   NaClDescPReadNotImplemented,
     113                 :   NaClDescPWriteNotImplemented,
     114                 :   NaClDescMutexFstat,
     115                 :   NaClDescGetdentsNotImplemented,
     116                 :   NaClDescExternalizeSizeNotImplemented,
     117                 :   NaClDescExternalizeNotImplemented,
     118                 :   NaClDescMutexLock,
     119                 :   NaClDescMutexTryLock,
     120                 :   NaClDescMutexUnlock,
     121                 :   NaClDescWaitNotImplemented,
     122                 :   NaClDescTimedWaitAbsNotImplemented,
     123                 :   NaClDescSignalNotImplemented,
     124                 :   NaClDescBroadcastNotImplemented,
     125                 :   NaClDescSendMsgNotImplemented,
     126                 :   NaClDescRecvMsgNotImplemented,
     127                 :   NaClDescLowLevelSendMsgNotImplemented,
     128                 :   NaClDescLowLevelRecvMsgNotImplemented,
     129                 :   NaClDescConnectAddrNotImplemented,
     130                 :   NaClDescAcceptConnNotImplemented,
     131                 :   NaClDescPostNotImplemented,
     132                 :   NaClDescSemWaitNotImplemented,
     133                 :   NaClDescGetValueNotImplemented,
     134                 :   NaClDescSetMetadata,
     135                 :   NaClDescGetMetadata,
     136                 :   NaClDescSetFlags,
     137                 :   NaClDescGetFlags,
     138                 :   NaClDescIsattyNotImplemented,
     139                 :   NACL_DESC_MUTEX,
     140                 : };

Generated by: LCOV version 1.7