khronosfws/openmax_al/src/common/xaplatform.c
author hgs
Tue, 21 Sep 2010 11:38:43 -0500
changeset 53 eabc8c503852
parent 25 6f7ceef7b1d1
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
25
hgs
parents: 12
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 12
diff changeset
     3
 * All rights reserved.
hgs
parents: 12
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 12
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 12
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 12
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 12
diff changeset
     8
 *
hgs
parents: 12
diff changeset
     9
 * Initial Contributors:
hgs
parents: 12
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 12
diff changeset
    11
 *
hgs
parents: 12
diff changeset
    12
 * Contributors:
hgs
parents: 12
diff changeset
    13
 *
hgs
parents: 12
diff changeset
    14
 * Description: Platform Specific Utility Functions
hgs
parents: 12
diff changeset
    15
 *
hgs
parents: 12
diff changeset
    16
 */
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <pthread.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include <semaphore.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include <stdio.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
#include <stdlib.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include <errno.h>
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
#include "xaplatform.h"
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
/** MACROS **/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
/**********************************************************************
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
 * mutex management
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
 **********************************************************************/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
/* define next if platform supports posix error checking mutex type */
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
#undef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
#ifdef _MUTEXERRORSUPPORT
25
hgs
parents: 12
diff changeset
    35
typedef pthread_mutex_t XA_MTX;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
#else
25
hgs
parents: 12
diff changeset
    37
typedef struct
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
    {
25
hgs
parents: 12
diff changeset
    39
    pthread_mutex_t mutex;
hgs
parents: 12
diff changeset
    40
    pthread_t owner;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
    } XA_MTX;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
#endif
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
25
hgs
parents: 12
diff changeset
    44
XAresult XAImpl_CreateMutex(XAImplMutexHandle *mtx)
hgs
parents: 12
diff changeset
    45
    {
hgs
parents: 12
diff changeset
    46
    XA_MTX *pMtx = (XA_MTX *) malloc(sizeof(XA_MTX));
hgs
parents: 12
diff changeset
    47
    if (pMtx)
hgs
parents: 12
diff changeset
    48
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
        pthread_mutexattr_t *pAttr = NULL;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
#ifdef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
        pthread_mutexattr_t attr;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
        pAttr = &attr;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
        pthread_mutexattr_init(pAttr);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
        pthread_mutexattr_settype(pAttr, PTHREAD_MUTEX_ERRORCHECK);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
        if(pthread_mutex_init(pMtx, pAttr))
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
#else
25
hgs
parents: 12
diff changeset
    57
        if (pthread_mutex_init(&(pMtx->mutex), pAttr))
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
#endif
25
hgs
parents: 12
diff changeset
    59
            {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
            free(pMtx);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
            *mtx = NULL;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
            return XA_RESULT_INTERNAL_ERROR;
25
hgs
parents: 12
diff changeset
    63
            }
hgs
parents: 12
diff changeset
    64
        *mtx = (XAImplMutexHandle) pMtx;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    65
        return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
    66
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
    else
25
hgs
parents: 12
diff changeset
    68
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
        return XA_RESULT_MEMORY_FAILURE;
25
hgs
parents: 12
diff changeset
    70
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
25
hgs
parents: 12
diff changeset
    73
XAresult XAImpl_LockMutex(XAImplMutexHandle mtx)
hgs
parents: 12
diff changeset
    74
    {
hgs
parents: 12
diff changeset
    75
    XA_MTX *pMtx = (XA_MTX*) mtx;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
#ifdef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
    if(pthread_mutex_lock(pMtx))
25
hgs
parents: 12
diff changeset
    78
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
        return XA_RESULT_PRECONDITIONS_VIOLATED;
25
hgs
parents: 12
diff changeset
    80
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
#else
25
hgs
parents: 12
diff changeset
    82
    if (pthread_self() == pMtx->owner || pthread_mutex_unlock(&(pMtx->mutex)))
hgs
parents: 12
diff changeset
    83
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    84
        return XA_RESULT_PRECONDITIONS_VIOLATED;
25
hgs
parents: 12
diff changeset
    85
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    86
    pMtx->owner = pthread_self();
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
#endif
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    88
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
    89
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    90
25
hgs
parents: 12
diff changeset
    91
XAresult XAImpl_TryLockMutex(XAImplMutexHandle mtx)
hgs
parents: 12
diff changeset
    92
    {
hgs
parents: 12
diff changeset
    93
    XA_MTX *pMtx = (XA_MTX*) mtx;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
    XAint32 mutexRet;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
    XAresult ret = XA_RESULT_SUCCESS;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
#ifdef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
    mutexRet = pthread_ mutex_trylock(pMtx);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
    switch (mutexRet)
25
hgs
parents: 12
diff changeset
   100
        {
hgs
parents: 12
diff changeset
   101
        case EBUSY:
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
        /* if mutex is already locked, return permission denied */
25
hgs
parents: 12
diff changeset
   103
        ret = XA_RESULT_PERMISSION_DENIED;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
        break;
25
hgs
parents: 12
diff changeset
   105
        case 0:
hgs
parents: 12
diff changeset
   106
        ret = XA_RESULT_SUCCESS;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
        break;
25
hgs
parents: 12
diff changeset
   108
        default:
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
        ret = XA_RESULT_PRECONDITIONS_VIOLATED;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   110
        break;
25
hgs
parents: 12
diff changeset
   111
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   112
#else
25
hgs
parents: 12
diff changeset
   113
    if (pthread_self() == pMtx->owner)
hgs
parents: 12
diff changeset
   114
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   115
        return XA_RESULT_PRECONDITIONS_VIOLATED;
25
hgs
parents: 12
diff changeset
   116
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   117
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   118
    mutexRet = pthread_mutex_trylock(&(pMtx->mutex));
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   119
    switch (mutexRet)
25
hgs
parents: 12
diff changeset
   120
        {
hgs
parents: 12
diff changeset
   121
        case EBUSY:
hgs
parents: 12
diff changeset
   122
            /* if mutex is already locked, return permission denied */
hgs
parents: 12
diff changeset
   123
            ret = XA_RESULT_PERMISSION_DENIED;
hgs
parents: 12
diff changeset
   124
            break;
hgs
parents: 12
diff changeset
   125
        case 0:
hgs
parents: 12
diff changeset
   126
            pMtx->owner = pthread_self();
hgs
parents: 12
diff changeset
   127
            ret = XA_RESULT_SUCCESS;
hgs
parents: 12
diff changeset
   128
            break;
hgs
parents: 12
diff changeset
   129
        default:
hgs
parents: 12
diff changeset
   130
            ret = XA_RESULT_PRECONDITIONS_VIOLATED;
hgs
parents: 12
diff changeset
   131
            break;
hgs
parents: 12
diff changeset
   132
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
#endif
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   134
    return ret;
25
hgs
parents: 12
diff changeset
   135
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   136
25
hgs
parents: 12
diff changeset
   137
XAresult XAImpl_UnlockMutex(XAImplMutexHandle mtx)
hgs
parents: 12
diff changeset
   138
    {
hgs
parents: 12
diff changeset
   139
    XA_MTX *pMtx = (XA_MTX*) mtx;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   140
#ifdef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   141
    if(pthread_mutex_lock(pMtx))
25
hgs
parents: 12
diff changeset
   142
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   143
        return XA_RESULT_PRECONDITIONS_VIOLATED;
25
hgs
parents: 12
diff changeset
   144
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   145
#else
25
hgs
parents: 12
diff changeset
   146
    if (pthread_self() != pMtx->owner || pthread_mutex_unlock(&(pMtx->mutex)))
hgs
parents: 12
diff changeset
   147
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   148
        return XA_RESULT_PRECONDITIONS_VIOLATED;
25
hgs
parents: 12
diff changeset
   149
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
    // Changing the below value to 0 since owner is an unsigned int.
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
    // pMtx->owner = -1;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   152
    pMtx->owner = 0;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
#endif
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   155
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   156
25
hgs
parents: 12
diff changeset
   157
void XAImpl_DeleteMutex(XAImplMutexHandle mtx)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   158
    {
25
hgs
parents: 12
diff changeset
   159
    XA_MTX *pMtx = (XA_MTX*) mtx;
hgs
parents: 12
diff changeset
   160
    if (pMtx)
hgs
parents: 12
diff changeset
   161
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
#ifdef _MUTEXERRORSUPPORT
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   163
        pthread_mutex_destroy(pMtx);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   164
#else
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   165
        pthread_mutex_destroy(&(pMtx->mutex));
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
#endif
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   167
        free(pMtx);
25
hgs
parents: 12
diff changeset
   168
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
/**********************************************************************
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
 * semaphores
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
 **********************************************************************/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
25
hgs
parents: 12
diff changeset
   175
XAresult XAImpl_CreateSemaphore(XAImplSemHandle *sem)
hgs
parents: 12
diff changeset
   176
    {
hgs
parents: 12
diff changeset
   177
    sem_t *pSem = (sem_t*) malloc(sizeof(sem_t));
hgs
parents: 12
diff changeset
   178
    if (pSem)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
        {
25
hgs
parents: 12
diff changeset
   180
        if (sem_init(pSem, 0, 0))
hgs
parents: 12
diff changeset
   181
            {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   182
            free(pSem);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
            *sem = NULL;
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
            return XA_RESULT_INTERNAL_ERROR;
25
hgs
parents: 12
diff changeset
   185
            }
hgs
parents: 12
diff changeset
   186
        *sem = (XAImplSemHandle) pSem;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   187
        return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   188
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
    else
25
hgs
parents: 12
diff changeset
   190
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   191
        return XA_RESULT_MEMORY_FAILURE;
25
hgs
parents: 12
diff changeset
   192
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   193
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   194
25
hgs
parents: 12
diff changeset
   195
XAresult XAImpl_WaitSemaphore(XAImplSemHandle sem)
hgs
parents: 12
diff changeset
   196
    {
hgs
parents: 12
diff changeset
   197
    sem_t* pSem = (sem_t*) sem;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   198
    sem_wait(pSem);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   199
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   200
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   201
25
hgs
parents: 12
diff changeset
   202
XAresult XAImpl_PostSemaphore(XAImplSemHandle sem)
hgs
parents: 12
diff changeset
   203
    {
hgs
parents: 12
diff changeset
   204
    sem_t *pSem = (sem_t*) sem;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   205
    sem_post(pSem);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   206
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   207
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
25
hgs
parents: 12
diff changeset
   209
void XAImpl_DeleteSemaphore(XAImplSemHandle sem)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   210
    {
25
hgs
parents: 12
diff changeset
   211
    sem_t *pSem = (sem_t*) sem;
hgs
parents: 12
diff changeset
   212
    if (pSem)
hgs
parents: 12
diff changeset
   213
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   214
        sem_destroy(pSem);
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   215
        free(pSem);
25
hgs
parents: 12
diff changeset
   216
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   217
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   218
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   219
/**********************************************************************
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   220
 * THREADS
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   221
 **********************************************************************/
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   222
25
hgs
parents: 12
diff changeset
   223
XAresult XAImpl_CreateThreadHandle(XAImplThreadHandle *thd)
hgs
parents: 12
diff changeset
   224
    {
hgs
parents: 12
diff changeset
   225
    pthread_t *pThd = (pthread_t*) malloc(sizeof(pthread_t));
hgs
parents: 12
diff changeset
   226
    if (!pThd)
hgs
parents: 12
diff changeset
   227
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   228
        return XA_RESULT_MEMORY_FAILURE;
25
hgs
parents: 12
diff changeset
   229
        }
hgs
parents: 12
diff changeset
   230
    *thd = (XAImplThreadHandle) pThd;
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   231
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   232
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   233
25
hgs
parents: 12
diff changeset
   234
XAresult XAImpl_StartThread(XAImplThreadHandle thd, void *thdattrib,
hgs
parents: 12
diff changeset
   235
        XAImplThreadFunction thdfunc, void* thdfuncargs)
hgs
parents: 12
diff changeset
   236
    {
hgs
parents: 12
diff changeset
   237
    pthread_t *pThd = (pthread_t*) thd;
hgs
parents: 12
diff changeset
   238
    if (pthread_create(pThd, thdattrib, thdfunc, thdfuncargs))
hgs
parents: 12
diff changeset
   239
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   240
        return XA_RESULT_INTERNAL_ERROR;
25
hgs
parents: 12
diff changeset
   241
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   242
    return XA_RESULT_SUCCESS;
25
hgs
parents: 12
diff changeset
   243
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   244
25
hgs
parents: 12
diff changeset
   245
void XAImpl_CancelThread(XAImplThreadHandle thd)
hgs
parents: 12
diff changeset
   246
    {
hgs
parents: 12
diff changeset
   247
    // int res;
hgs
parents: 12
diff changeset
   248
    // TL: TODO: There is no pthread_cancel API in S60, need to replace
hgs
parents: 12
diff changeset
   249
    //res = pthread_cancel(*pThd);
hgs
parents: 12
diff changeset
   250
hgs
parents: 12
diff changeset
   251
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   252
25
hgs
parents: 12
diff changeset
   253
void XAImpl_ExitThread(XAImplThreadHandle thd)
hgs
parents: 12
diff changeset
   254
    {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   255
    pthread_exit(NULL);
25
hgs
parents: 12
diff changeset
   256
    }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   257
25
hgs
parents: 12
diff changeset
   258
void XAImpl_DeleteThreadHandle(XAImplThreadHandle thd)
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
    {
25
hgs
parents: 12
diff changeset
   260
    pthread_t *pThd = (pthread_t*) thd;
hgs
parents: 12
diff changeset
   261
    if (pThd)
hgs
parents: 12
diff changeset
   262
        {
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
        free(pThd);
25
hgs
parents: 12
diff changeset
   264
        }
12
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
    }
5a06f39ad45b Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266