1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* 2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License. 6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at 7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and 14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License. 15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file M4OSA_Semaphore.c 19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief Semaphore for Windows 20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This file implements functions to manipulate semaphore 21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h" 27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Types.h" 28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Error.h" 29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h" 30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Semaphore.h" 31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <semaphore.h> 33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <string.h> 34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <stdlib.h> 35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <stdio.h> 36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <errno.h> 37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <time.h> 38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* Context for the semaphore */ 41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargitypedef struct { 42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 coreID; /* semaphore context identifiant */ 43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi sem_t semaphore; /* semaphore */ 44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} M4OSA_SemaphoreContext; 45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method creates a new semaphore with the "initialCounter" 52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * value. 53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This function creates and allocates a unique context. It's the 54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * OSAL real time responsibility for managing its context. It must 55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * be freed by the M4OSA_semaphoreClose function. The context 56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * parameter will be sent back to any OSAL core semaphore functions 57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * to allow retrieving data associated to the opened semaphore. 58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(OUT) Context of the created semaphore 59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param initial_count:(IN) Initial counter of the semaphore 60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: provided context is NULL 62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_CONTEXT_FAILED: the context creation failed 64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_semaphoreOpen(M4OSA_Context* context, 67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 initial_count) 68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_SemaphoreContext* semaphoreContext = M4OSA_NULL; 70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_semaphoreOpen\t\tM4OSA_Context* 0x%x\tM4OSA_UInt32 " 72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "%d", context, initial_count); 73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_semaphoreOpen"); 76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *context = M4OSA_NULL; 78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 79694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu semaphoreContext = (M4OSA_SemaphoreContext*) M4OSA_32bitAlignedMalloc( 80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi sizeof(M4OSA_SemaphoreContext), M4OSA_SEMAPHORE, 81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_Char*)"M4OSA_semaphoreOpen: semaphore context"); 82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(semaphoreContext == M4OSA_NULL) 84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_semaphoreOpen"); 86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_ALLOC; 88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (0 != sem_init(&semaphoreContext->semaphore, 0, initial_count)) 91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 92694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(semaphoreContext); 93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_CONTEXT_FAILED, 95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_semaphoreOpen: OS semaphore creation failed"); 96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_CONTEXT_FAILED; 98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi semaphoreContext->coreID = M4OSA_SEMAPHORE ; 101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *context = (M4OSA_Context)semaphoreContext; 102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method decrements (one by one) the semaphore counter. The 112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * semaphore is identified by its context This call is not blocking 113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * if the semaphore counter is positive or zero (after 114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * decrementation). This call is blocking if the semaphore counter 115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * is less than zero (after decrementation), until the semaphore is 116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * upper than zero (see M4OSA_semaphorePost) or time_out is 117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * reached. 118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note If "timeout" value is M4OSA_WAIT_FOREVER, the calling thread 119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * will block indefinitely until the semaphore is unlocked. 120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the semaphore 121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param timeout:(IN) Time out in milliseconds 122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4WAR_TIME_OUT: time out is elapsed before semaphore has been 125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * available. 126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_semaphoreWait(M4OSA_Context context, M4OSA_Int32 timeout) 130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_SemaphoreContext* semaphoreContext = (M4OSA_SemaphoreContext*)context; 132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi struct timespec ts; 133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi struct timespec left; 134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi int result; 135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_2("M4OSA_semaphoreWait\t\tM4OSA_Context 0x%x\tM4OSA_UInt32 %d", 137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi context, timeout); 138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_semaphoreWait"); 141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(semaphoreContext->coreID != M4OSA_SEMAPHORE, 143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_semaphoreWait"); 144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( (M4OSA_Int32)M4OSA_WAIT_FOREVER == timeout) 146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( 0 != sem_wait(&semaphoreContext->semaphore) ) 148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_BAD_CONTEXT, 150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_semaphoreWait: OS semaphore wait failed"); 151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT ; 153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi result = sem_trywait(&semaphoreContext->semaphore); 158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi while ( ((EBUSY == result) || (EAGAIN == result)) && ( 0 < timeout ) ) 159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ts.tv_sec = 0; 161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (1 <= timeout) 162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ts.tv_nsec = 1000000; 164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi timeout -= 1; 165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 167855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ts.tv_nsec = timeout * 1000000; 169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi timeout = 0; 170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi nanosleep(&ts, &left); 172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi result = sem_trywait(&semaphoreContext->semaphore); 173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (0 != result) 175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((EBUSY == result) || (EAGAIN == result)) 177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4WAR_TIME_OUT; 179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_semaphoreWait: OS semaphore wait failed"); 183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; 184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 185855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method increments the semaphore counter. The semaphore is 198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * identified by its context 199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note If the semaphore counter is upper than zero (after addition), 200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the M4OSA_semaphoreWait call of the thread with the highest 201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * priority is unblocked and made ready to run. 202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note No hypotheses can be made on which thread will be unblocked 203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * between threads with the same priority. 204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the semaphore 205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 210855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_semaphorePost(M4OSA_Context context) 211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_SemaphoreContext* semaphoreContext = (M4OSA_SemaphoreContext*)context; 213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_semaphorePost\t\tM4OSA_Context 0x%x", context); 215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 217855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_semaphorePost"); 218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(semaphoreContext->coreID != M4OSA_SEMAPHORE, 220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_semaphorePost"); 221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi sem_post(&semaphoreContext->semaphore); 223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This method deletes a semaphore (identify by its context). 234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * After this call the semaphore and its context is no more 235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * useable. This function frees all the memory related to this 236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * semaphore. 237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note It is an application issue to warrant no more threads are locked 238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * on the deleted semaphore. 239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context:(IN/OUT) Context of the semaphore 240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one. 243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_semaphoreClose(M4OSA_Context context) 246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_SemaphoreContext* semaphoreContext = (M4OSA_SemaphoreContext*)context; 248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_semaphoreClose\t\tM4OSA_Context 0x%x", context); 250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(context == M4OSA_NULL, 252855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_PARAMETER, "M4OSA_semaphoreClose"); 253855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(semaphoreContext->coreID != M4OSA_SEMAPHORE, 255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_semaphoreClose"); 256855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi sem_destroy(&semaphoreContext->semaphore); 258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 259694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(semaphoreContext); 260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 261855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 264