CdStreamPosix fixes
This commit is contained in:
parent
3dfffdf351
commit
2e7405b76c
@ -76,7 +76,7 @@ CdStreamInitThread(void)
|
|||||||
gChannelRequestQ.tail = 0;
|
gChannelRequestQ.tail = 0;
|
||||||
gChannelRequestQ.size = gNumChannels + 1;
|
gChannelRequestQ.size = gNumChannels + 1;
|
||||||
ASSERT(gChannelRequestQ.items != nil );
|
ASSERT(gChannelRequestQ.items != nil );
|
||||||
gCdStreamSema = sem_open("/semaphore_cd_stream", O_CREAT, 0644, 1);
|
gCdStreamSema = sem_open("/semaphore_cd_stream", O_CREAT, 0644, 0);
|
||||||
|
|
||||||
|
|
||||||
if (gCdStreamSema == SEM_FAILED) {
|
if (gCdStreamSema == SEM_FAILED) {
|
||||||
@ -91,7 +91,7 @@ CdStreamInitThread(void)
|
|||||||
for ( int32 i = 0; i < gNumChannels; i++ )
|
for ( int32 i = 0; i < gNumChannels; i++ )
|
||||||
{
|
{
|
||||||
sprintf(semName,"/semaphore_done%d",i);
|
sprintf(semName,"/semaphore_done%d",i);
|
||||||
gpReadInfo[i].pDoneSemaphore = sem_open(semName, O_CREAT, 0644, 1);
|
gpReadInfo[i].pDoneSemaphore = sem_open(semName, O_CREAT, 0644, 0);
|
||||||
|
|
||||||
if (gpReadInfo[i].pDoneSemaphore == SEM_FAILED)
|
if (gpReadInfo[i].pDoneSemaphore == SEM_FAILED)
|
||||||
{
|
{
|
||||||
@ -102,7 +102,7 @@ CdStreamInitThread(void)
|
|||||||
|
|
||||||
#ifdef ONE_THREAD_PER_CHANNEL
|
#ifdef ONE_THREAD_PER_CHANNEL
|
||||||
sprintf(semName,"/semaphore_start%d",i);
|
sprintf(semName,"/semaphore_start%d",i);
|
||||||
gpReadInfo[i].pStartSemaphore = sem_open(semName, O_CREAT, 0644, 1);
|
gpReadInfo[i].pStartSemaphore = sem_open(semName, O_CREAT, 0644, 0);
|
||||||
|
|
||||||
if (gpReadInfo[i].pStartSemaphore == SEM_FAILED)
|
if (gpReadInfo[i].pStartSemaphore == SEM_FAILED)
|
||||||
{
|
{
|
||||||
@ -171,6 +171,7 @@ CdStreamInit(int32 numChannels)
|
|||||||
gNumImages = 0;
|
gNumImages = 0;
|
||||||
|
|
||||||
gNumChannels = numChannels;
|
gNumChannels = numChannels;
|
||||||
|
ASSERT( gNumChannels != 0 );
|
||||||
|
|
||||||
gpReadInfo = (CdReadInfo *)calloc(numChannels, sizeof(CdReadInfo));
|
gpReadInfo = (CdReadInfo *)calloc(numChannels, sizeof(CdReadInfo));
|
||||||
ASSERT( gpReadInfo != nil );
|
ASSERT( gpReadInfo != nil );
|
||||||
@ -398,7 +399,12 @@ void *CdStreamThread(void *param)
|
|||||||
#ifndef ONE_THREAD_PER_CHANNEL
|
#ifndef ONE_THREAD_PER_CHANNEL
|
||||||
while (gCdStreamThreadStatus != 2) {
|
while (gCdStreamThreadStatus != 2) {
|
||||||
sem_wait(gCdStreamSema);
|
sem_wait(gCdStreamSema);
|
||||||
|
|
||||||
int32 channel = GetFirstInQueue(&gChannelRequestQ);
|
int32 channel = GetFirstInQueue(&gChannelRequestQ);
|
||||||
|
|
||||||
|
// spurious wakeup
|
||||||
|
if (channel == -1)
|
||||||
|
continue;
|
||||||
#else
|
#else
|
||||||
int channel = *((int*)param);
|
int channel = *((int*)param);
|
||||||
while (gpReadInfo[channel].nThreadStatus != 2){
|
while (gpReadInfo[channel].nThreadStatus != 2){
|
||||||
|
Loading…
Reference in New Issue
Block a user