Remove GetLockedContext

This commit is contained in:
Chris Robinson 2011-09-11 09:28:30 -07:00
parent 54a421ec58
commit 8f456f68ff
3 changed files with 31 additions and 38 deletions

View File

@ -1566,29 +1566,6 @@ ALCvoid UnlockContext(ALCcontext *context)
ALCcontext_DecRef(context);
}
/* GetLockedContext
*
* Returns the currently active context, in a locked state.
*/
ALCcontext *GetLockedContext(void)
{
ALCcontext *context = NULL;
context = pthread_getspecific(LocalContext);
if(context)
LockContext(context);
else
{
LockLists();
context = GlobalContext;
if(context)
LockContext(context);
UnlockLists();
}
return context;
}
/* GetContextRef
*
* Returns the currently active context, and adds a reference without locking

View File

@ -635,6 +635,8 @@ struct ALCcontext_struct
ALCcontext *volatile next;
};
ALCcontext *GetContextRef(void);
void ALCcontext_IncRef(ALCcontext *context);
void ALCcontext_DecRef(ALCcontext *context);
@ -652,9 +654,6 @@ ALCvoid UnlockContext(ALCcontext *context);
ALvoid *StartThread(ALuint (*func)(ALvoid*), ALvoid *ptr);
ALuint StopThread(ALvoid *thread);
ALCcontext *GetLockedContext(void);
ALCcontext *GetContextRef(void);
typedef struct RingBuffer RingBuffer;
RingBuffer *CreateRingBuffer(ALsizei frame_size, ALsizei length);
void DestroyRingBuffer(RingBuffer *ring);

View File

@ -1383,7 +1383,7 @@ AL_API ALvoid AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources)
ALsource *Source;
ALsizei i;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1407,6 +1407,7 @@ AL_API ALvoid AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources)
}
}
LockContext(Context);
while(Context->MaxActiveSources-Context->ActiveSourceCount < n)
{
void *temp = NULL;
@ -1418,6 +1419,7 @@ AL_API ALvoid AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources)
sizeof(*Context->ActiveSources) * newcount);
if(!temp)
{
UnlockContext(Context);
alSetError(Context, AL_OUT_OF_MEMORY);
goto done;
}
@ -1432,9 +1434,10 @@ AL_API ALvoid AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources)
if(Context->DeferUpdates) Source->new_state = AL_PLAYING;
else SetSourceState(Source, Context, AL_PLAYING);
}
UnlockContext(Context);
done:
UnlockContext(Context);
ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alSourcePause(ALuint source)
@ -1448,7 +1451,7 @@ AL_API ALvoid AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources)
ALsource *Source;
ALsizei i;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1472,15 +1475,17 @@ AL_API ALvoid AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources)
}
}
LockContext(Context);
for(i = 0;i < n;i++)
{
Source = LookupSource(Context->SourceMap, sources[i]);
if(Context->DeferUpdates) Source->new_state = AL_PAUSED;
else SetSourceState(Source, Context, AL_PAUSED);
}
UnlockContext(Context);
done:
UnlockContext(Context);
ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alSourceStop(ALuint source)
@ -1494,7 +1499,7 @@ AL_API ALvoid AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources)
ALsource *Source;
ALsizei i;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1518,15 +1523,17 @@ AL_API ALvoid AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources)
}
}
LockContext(Context);
for(i = 0;i < n;i++)
{
Source = LookupSource(Context->SourceMap, sources[i]);
Source->new_state = AL_NONE;
SetSourceState(Source, Context, AL_STOPPED);
}
UnlockContext(Context);
done:
UnlockContext(Context);
ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alSourceRewind(ALuint source)
@ -1540,7 +1547,7 @@ AL_API ALvoid AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources)
ALsource *Source;
ALsizei i;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1564,15 +1571,17 @@ AL_API ALvoid AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources)
}
}
LockContext(Context);
for(i = 0;i < n;i++)
{
Source = LookupSource(Context->SourceMap, sources[i]);
Source->new_state = AL_NONE;
SetSourceState(Source, Context, AL_INITIAL);
}
UnlockContext(Context);
done:
UnlockContext(Context);
ALCcontext_DecRef(Context);
}
@ -1589,7 +1598,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
if(n == 0)
return;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1607,9 +1616,11 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
goto error;
}
LockContext(Context);
// Check that this is not a STATIC Source
if(Source->lSourceType == AL_STATIC)
{
UnlockContext(Context);
// Invalid Source Type (can't queue on a Static Source)
alSetError(Context, AL_INVALID_OPERATION);
goto error;
@ -1636,6 +1647,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
ALbuffer *buffer = NULL;
if(buffers[i] && (buffer=LookupBuffer(device->BufferMap, buffers[i])) == NULL)
{
UnlockContext(Context);
alSetError(Context, AL_INVALID_NAME);
goto error;
}
@ -1679,6 +1691,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
BufferFmt->OriginalType != buffer->OriginalType)
{
ReadUnlock(&buffer->lock);
UnlockContext(Context);
alSetError(Context, AL_INVALID_OPERATION);
goto error;
}
@ -1705,6 +1718,7 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
Source->BuffersInQueue += n;
UnlockContext(Context);
ALCcontext_DecRef(Context);
return;
error:
@ -1717,7 +1731,7 @@ error:
DecrementRef(&BufferList->buffer->ref);
free(BufferList);
}
UnlockContext(Context);
ALCcontext_DecRef(Context);
}
@ -1733,7 +1747,7 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALui
if(n == 0)
return;
Context = GetLockedContext();
Context = GetContextRef();
if(!Context) return;
if(n < 0)
@ -1748,9 +1762,11 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALui
goto done;
}
LockContext(Context);
if(Source->bLooping || Source->lSourceType != AL_STREAMING ||
(ALuint)n > Source->BuffersPlayed)
{
UnlockContext(Context);
// Some buffers can't be unqueue because they have not been processed
alSetError(Context, AL_INVALID_VALUE);
goto done;
@ -1778,9 +1794,10 @@ AL_API ALvoid AL_APIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALui
}
if(Source->queue)
Source->queue->prev = NULL;
UnlockContext(Context);
done:
UnlockContext(Context);
ALCcontext_DecRef(Context);
}