Commit ba9e6b43 authored by Emmanuel Milou's avatar Emmanuel Milou
Browse files

Remove all locks

parent 16cd6197
......@@ -62,6 +62,8 @@ sflphoned_LDADD = \
@PULSEAUDIO_LIBS@ \
@SAMPLERATE_LIBS@
#sflphoned_LDFLAGS=-pg
noinst_LTLIBRARIES = libsflphone.la
noinst_HEADERS = \
......
......@@ -54,7 +54,7 @@ AlsaLayer::~AlsaLayer (void)
deviceClosed = true;
ringtone_thread_is_running = false;
pthread_join(ringtone_thread, NULL);
//pthread_join(ringtone_thread, NULL);
}
void
......@@ -104,7 +104,7 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize,
_debugAlsa(" : nb channel in=%2d, out=%2d\n", _inChannel, _outChannel);
_debugAlsa(" : sample rate=%5d, format=%s\n", _sampleRate, SFLDataFormatString);
ost::MutexLock lock( _mutex );
//ost::MutexLock lock( _mutex );
/*void **hint;
......@@ -163,6 +163,7 @@ void* ringtoneThreadEntry( void *ptr )
( ( AlsaLayer *) ptr) -> playTones();
//sleep(0.1);
}
/*
pthread_mutex_lock(&mut);
while( ((AlsaLayer*)ptr)->_manager->getTelephoneTone() == NULL )
......@@ -171,6 +172,7 @@ void* ringtoneThreadEntry( void *ptr )
}
( AlsaLayer *) ptr -> playTones();
pthread_mutex_unlock(&mut);*/
return 0;
}
......@@ -206,7 +208,7 @@ AlsaLayer::fillHWBuffer( void)
bool
AlsaLayer::isStreamActive (void)
{
ost::MutexLock lock( _mutex );
//ost::MutexLock lock( _mutex );
return (isPlaybackActive() && isCaptureActive());
}
......@@ -279,7 +281,7 @@ AlsaLayer::getMic(void *buffer, int toCopy)
bool
AlsaLayer::isStreamStopped (void)
{
ost::MutexLock lock( _mutex );
//ost::MutexLock lock( _mutex );
return !(isStreamActive());
}
......@@ -291,20 +293,18 @@ void AlsaLayer::restorePulseAppsVolume( void ){}
///////////////// ALSA PRIVATE FUNCTIONS ////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
void
AlsaLayer::playTones( void )
{
int frames;
int maxBytes;
pthread_mutex_lock(&mut);
while(!_manager-> getTelephoneTone() && !_manager->getTelephoneFile())
{
//pthread_mutex_lock(&mut);
//while(!_manager-> getTelephoneTone() && !_manager->getTelephoneFile())
//{
_debug("Make the ringtone thread wait\n");
pthread_cond_wait(&cond, &mut);
}
//}
//frames = _periodSize ;
frames = 940 ;
......@@ -324,13 +324,13 @@ AlsaLayer::playTones( void )
}
// free the temporary data buffer
free( out ); out = 0;
pthread_mutex_unlock(&mut);
//pthread_mutex_unlock(&mut);
}
bool
AlsaLayer::isPlaybackActive(void) {
ost::MutexLock guard( _mutex );
//ost::MutexLock guard( _mutex );
if( _PlaybackHandle )
return (snd_pcm_state(_PlaybackHandle) == SND_PCM_STATE_RUNNING ? true : false);
else
......@@ -339,7 +339,7 @@ AlsaLayer::isPlaybackActive(void) {
bool
AlsaLayer::isCaptureActive(void) {
ost::MutexLock guard( _mutex );
//ost::MutexLock guard( _mutex );
if( _CaptureHandle )
return (snd_pcm_state( _CaptureHandle) == SND_PCM_STATE_RUNNING ? true : false);
else
......@@ -452,11 +452,11 @@ bool AlsaLayer::alsa_set_params( snd_pcm_t *pcm_handle, int type, int rate ){
// So the loop could start when the ringtone thread entry function is reached
ringtone_thread_is_running = true;
if( pthread_create(&ringtone_thread, NULL, ringtoneThreadEntry, this) != 0 )
/*if( pthread_create(&ringtone_thread, NULL, ringtoneThreadEntry, this) != 0 )
{
_debug("Unable to start the ringtone posix thread\n");
return false;
}
}*/
}
snd_pcm_sw_params_free( swparams );
......
......@@ -52,7 +52,7 @@ AudioRtp::~AudioRtp (void) {
int
AudioRtp::createNewSession (SIPCall *ca) {
ost::MutexLock m(_threadMutex);
//ost::MutexLock m(_threadMutex);
// something should stop the thread before...
if ( _RTXThread != 0 ) {
......@@ -66,7 +66,7 @@ AudioRtp::createNewSession (SIPCall *ca) {
_RTXThread = new AudioRtpRTX (ca, _symmetric);
try {
if (_RTXThread->start() != 0) {
_debug("! ARTP Failure: unable to start RTX Thread\n");
_debug("! ARTP Failure: unable to start RTX Thread\n");
return -1;
}
} catch(...) {
......@@ -79,7 +79,7 @@ AudioRtp::createNewSession (SIPCall *ca) {
void
AudioRtp::closeRtpSession () {
ost::MutexLock m(_threadMutex);
//ost::MutexLock m(_threadMutex);
// This will make RTP threads finish.
// _debug("Stopping AudioRTP\n");
try {
......
......@@ -89,7 +89,7 @@ PulseLayer::connectPulseAudioServer( void )
}
pa_threaded_mainloop_unlock( m );
serverinfo();
//serverinfo();
//muteAudioApps(99);
_debug("Context creation done\n");
}
......
......@@ -64,20 +64,20 @@ ManagerImpl::ManagerImpl (void)
: _hasTriedToRegister(false)
, _config()
, _currentCallId2()
, _currentCallMutex()
//, _currentCallMutex()
, _codecBuilder(NULL)
, _audiodriver(NULL)
, _dtmfKey(NULL)
, _codecDescriptorMap()
, _toneMutex()
//, _toneMutex()
, _telephoneTone(NULL)
, _audiofile()
, _spkr_volume(0)
, _mic_volume(0)
, _mutex()
//, _mutex()
, _dbus(NULL)
, _waitingCall()
, _waitingCallMutex()
//, _waitingCallMutex()
, _nbIncomingWaitingCall(0)
, _path("")
, _exist(0)
......@@ -86,7 +86,7 @@ ManagerImpl::ManagerImpl (void)
, _firewallAddr("")
, _hasZeroconf(false)
, _callAccountMap()
, _callAccountMapMutex()
//, _callAccountMapMutex()
, _accountMap()
, _userAgent(NULL)
, _userAgentInitlized(false)
......@@ -203,13 +203,13 @@ void ManagerImpl::terminate()
bool
ManagerImpl::isCurrentCall(const CallID& callId) {
ost::MutexLock m(_currentCallMutex);
//ost::MutexLock m(_currentCallMutex);
return (_currentCallId2 == callId ? true : false);
}
bool
ManagerImpl::hasCurrentCall() {
ost::MutexLock m(_currentCallMutex);
//ost::MutexLock m(_currentCallMutex);
_debug("Current call ID = %s\n", _currentCallId2.c_str());
if ( _currentCallId2 != "") {
return true;
......@@ -219,13 +219,13 @@ ManagerImpl::hasCurrentCall() {
const CallID&
ManagerImpl::getCurrentCallId() {
ost::MutexLock m(_currentCallMutex);
//ost::MutexLock m(_currentCallMutex);
return _currentCallId2;
}
void
ManagerImpl::switchCall(const CallID& id ) {
ost::MutexLock m(_currentCallMutex);
//ost::MutexLock m(_currentCallMutex);
_currentCallId2 = id;
}
......@@ -295,7 +295,9 @@ ManagerImpl::answerCall(const CallID& id)
ManagerImpl::hangupCall(const CallID& id)
{
stopTone(true);
if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
AccountID accountid = getAccountFromCall( id );
if (accountid == AccountNULL) {
/** @todo We should tell the GUI that the call doesn't exist, so
......@@ -305,6 +307,7 @@ ManagerImpl::hangupCall(const CallID& id)
}
bool returnValue = getAccountLink(accountid)->hangup(id);
_debug("After voip link hungup!\n");
removeCallAccount(id);
switchCall("");
......@@ -561,20 +564,20 @@ ManagerImpl::playDtmf(char code, bool isTalking)
// Multi-thread
bool
ManagerImpl::incomingCallWaiting() {
ost::MutexLock m(_waitingCallMutex);
//ost::MutexLock m(_waitingCallMutex);
return (_nbIncomingWaitingCall > 0) ? true : false;
}
void
ManagerImpl::addWaitingCall(const CallID& id) {
ost::MutexLock m(_waitingCallMutex);
//ost::MutexLock m(_waitingCallMutex);
_waitingCall.insert(id);
_nbIncomingWaitingCall++;
}
void
ManagerImpl::removeWaitingCall(const CallID& id) {
ost::MutexLock m(_waitingCallMutex);
//ost::MutexLock m(_waitingCallMutex);
// should return more than 1 if it erase a call
if (_waitingCall.erase(id)) {
_nbIncomingWaitingCall--;
......@@ -583,7 +586,7 @@ ManagerImpl::removeWaitingCall(const CallID& id) {
bool
ManagerImpl::isWaitingCall(const CallID& id) {
ost::MutexLock m(_waitingCallMutex);
//ost::MutexLock m(_waitingCallMutex);
CallIDSet::iterator iter = _waitingCall.find(id);
if (iter != _waitingCall.end()) {
return false;
......@@ -735,9 +738,9 @@ ManagerImpl::playATone(Tone::TONEID toneId) {
if (!hasToPlayTone) return false;
if (_telephoneTone != 0) {
_toneMutex.enterMutex();
//_toneMutex.enterMutex();
_telephoneTone->setCurrentTone(toneId);
_toneMutex.leaveMutex();
//_toneMutex.leaveMutex();
AudioLoop* audioloop = getTelephoneTone();
unsigned int nbSampling = audioloop->getSize();
......@@ -774,16 +777,16 @@ ManagerImpl::stopTone(bool stopAudio=true) {
}
_toneMutex.enterMutex();
//_toneMutex.enterMutex();
if (_telephoneTone != 0) {
_telephoneTone->setCurrentTone(Tone::TONE_NULL);
}
_toneMutex.leaveMutex();
//_toneMutex.leaveMutex();
// for ringing tone..
_toneMutex.enterMutex();
//_toneMutex.enterMutex();
_audiofile.stop();
_toneMutex.leaveMutex();
//_toneMutex.leaveMutex();
}
/**
......@@ -847,13 +850,13 @@ ManagerImpl::ringtone()
int sampleRate = audiolayer->getSampleRate();
AudioCodec* codecForTone = _codecDescriptorMap.getFirstCodecAvailable();
_toneMutex.enterMutex();
//_toneMutex.enterMutex();
bool loadFile = _audiofile.loadFile(ringchoice, codecForTone , sampleRate);
_toneMutex.leaveMutex();
//_toneMutex.leaveMutex();
if (loadFile) {
_toneMutex.enterMutex();
//_toneMutex.enterMutex();
_audiofile.start();
_toneMutex.leaveMutex();
//_toneMutex.leaveMutex();
if(CHECK_INTERFACE( layer, ALSA )){
/*int size = _audiofile.getSize();
SFLDataFormat output[ size ];
......@@ -880,7 +883,7 @@ ManagerImpl::ringtone()
ManagerImpl::getTelephoneTone()
{
if(_telephoneTone != 0) {
ost::MutexLock m(_toneMutex);
//ost::MutexLock m(_toneMutex);
return _telephoneTone->getCurrentTone();
}
else {
......@@ -891,7 +894,7 @@ ManagerImpl::getTelephoneTone()
AudioLoop*
ManagerImpl::getTelephoneFile()
{
ost::MutexLock m(_toneMutex);
//ost::MutexLock m(_toneMutex);
if(_audiofile.isStarted()) {
return &_audiofile;
} else {
......@@ -1837,7 +1840,7 @@ ManagerImpl::detachZeroconfEvents(Pattern::Observer& observer)
ManagerImpl::getCallStatus(const std::string& sequenceId UNUSED)
{
if (!_dbus) { return false; }
ost::MutexLock m(_callAccountMapMutex);
//ost::MutexLock m(_callAccountMapMutex);
CallAccountMap::iterator iter = _callAccountMap.begin();
TokenList tk;
std::string code;
......@@ -2139,7 +2142,7 @@ ManagerImpl::associateCallToAccount(const CallID& callID, const AccountID& accou
{
if (getAccountFromCall(callID) == AccountNULL) { // nothing with the same ID
if ( accountExists(accountID) ) { // account id exist in AccountMap
ost::MutexLock m(_callAccountMapMutex);
//ost::MutexLock m(_callAccountMapMutex);
_callAccountMap[callID] = accountID;
_debug("Associate Call %s with Account %s\n", callID.data(), accountID.data());
return true;
......@@ -2154,7 +2157,7 @@ ManagerImpl::associateCallToAccount(const CallID& callID, const AccountID& accou
AccountID
ManagerImpl::getAccountFromCall(const CallID& callID)
{
ost::MutexLock m(_callAccountMapMutex);
//ost::MutexLock m(_callAccountMapMutex);
CallAccountMap::iterator iter = _callAccountMap.find(callID);
if ( iter == _callAccountMap.end()) {
return AccountNULL;
......@@ -2166,7 +2169,7 @@ ManagerImpl::getAccountFromCall(const CallID& callID)
bool
ManagerImpl::removeCallAccount(const CallID& callID)
{
ost::MutexLock m(_callAccountMapMutex);
//ost::MutexLock m(_callAccountMapMutex);
if ( _callAccountMap.erase(callID) ) {
return true;
}
......
......@@ -868,7 +868,7 @@ class ManagerImpl {
CallID _currentCallId2;
/** Protected current call access */
ost::Mutex _currentCallMutex;
//ost::Mutex _currentCallMutex;
/** Vector of CodecDescriptor */
CodecDescriptor* _codecBuilder;
......@@ -886,7 +886,7 @@ class ManagerImpl {
/////////////////////
// Protected by Mutex
/////////////////////
ost::Mutex _toneMutex;
//ost::Mutex _toneMutex;
TelephoneTone* _telephoneTone;
AudioFile _audiofile;
......@@ -899,7 +899,7 @@ class ManagerImpl {
// Multithread variable (protected by _mutex)
//
/** Mutex to protect access to code section */
ost::Mutex _mutex;
//ost::Mutex _mutex;
// Multithread variable (non protected)
DBusManagerImpl * _dbus;
......@@ -908,7 +908,7 @@ class ManagerImpl {
CallIDSet _waitingCall;
/** Protect waiting call list, access by many voip/audio threads */
ost::Mutex _waitingCallMutex;
//ost::Mutex _waitingCallMutex;
/** Number of waiting call, synchronize with waitingcall callidvector */
unsigned int _nbIncomingWaitingCall;
......@@ -956,7 +956,7 @@ class ManagerImpl {
CallAccountMap _callAccountMap;
/** Mutex to lock the call account map (main thread + voiplink thread) */
ost::Mutex _callAccountMapMutex;
//ost::Mutex _callAccountMapMutex;
/** Associate a new CallID to a AccountID
* Protected by mutex
......
......@@ -81,7 +81,7 @@ void
SIPVoIPLink::terminateSIPCall()
{
ost::MutexLock m(_callMapMutex);
//ost::MutexLock m(_callMapMutex);
CallMap::iterator iter = _callMap.begin();
SIPCall *call;
while( iter != _callMap.end() ) {
......@@ -219,18 +219,21 @@ SIPVoIPLink::answer(const CallID& id)
bool
SIPVoIPLink::hangup(const CallID& id)
{
SIPCall* call = getSIPCall(id);
if (call==0) { _debug("! SIP Error: Call doesn't exist\n"); return false; }
SIPCall* call = getSIPCall(id);
if (call==0) { _debug("! SIP Error: Call doesn't exist\n"); return false; }
Manager::instance().getUserAgent()->hangup(call);
if(!Manager::instance().getUserAgent()->hangup(call))
return false;
// Release RTP thread
if (Manager::instance().isCurrentCall(id)) {
_debug("* SIP Info: Stopping AudioRTP for hangup\n");
_audiortp->closeRtpSession();
}
removeCall(id);
return true;
// Release RTP thread
if (Manager::instance().isCurrentCall(id)) {
_debug("* SIP Info: Stopping AudioRTP for hangup\n");
_audiortp->closeRtpSession();
}
removeCall(id);
return true;
}
bool
......
......@@ -1195,16 +1195,16 @@ bool UserAgent::hangup(SIPCall* call) {
// User hangup current call. Notify peer
status = pjsip_inv_end_session(call->getInvSession(), 404, NULL, &tdata);
if(status != PJ_SUCCESS)
return false;
return false;
_debug("UserAgent: Before send msg!\n");
if(tdata == NULL)
return true;
return true;
status = pjsip_inv_send_msg(call->getInvSession(), tdata);
if(status != PJ_SUCCESS)
return false;
return false;
call->getInvSession()->mod_data[getInstance()->getModId()] = NULL;
return true;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment