Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 9f5cc665f2
Fetching contributors…

Cannot retrieve contributors at this time

file 49 lines (46 sloc) 2.271 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
/**************************************************************************
* Copyright 2012 KISS Institute for Practical Robotics *
* *
* This file is part of libkovan. *
* *
* libkovan is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 2 of the License, or *
* (at your option) any later version. *
* *
* libkovan is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with libkovan. Check the LICENSE file in the project root. *
* If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/

#include "private.hpp"
#include <sys/shm.h>
#include <pthread.h>

namespace Private
{
bool initMutex(pthread_mutex_t *mutex)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
#ifdef linux
if(!pthread_mutexattr_setrobust_np(&attr, PTHREAD_MUTEX_ROBUST_NP)) return false;
#endif
if(!pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED)) return false;
if(!pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK)) return false;
if(!pthread_mutex_init(mutex, &attr)) return false;
pthread_mutexattr_destroy(&attr);
return true;
}
}

bool Private::initSharedMemory(Private::SharedMemory *shm)
{
bool success = true;
success &= Private::initMutex(&shm->serverMutex);
success &= Private::initMutex(&shm->clientMutex);
success &= Private::initMutex(&shm->interClientMutex);
return success;
}
Something went wrong with that request. Please try again.