|
|
@@ -76,7 +76,7 @@ CdStreamInitThread(void) |
|
|
gChannelRequestQ.tail = 0; |
|
|
gChannelRequestQ.size = gNumChannels + 1; |
|
|
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) { |
|
|
@@ -91,7 +91,7 @@ CdStreamInitThread(void) |
|
|
for ( int32 i = 0; i < gNumChannels; 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) |
|
|
{ |
|
|
@@ -102,7 +102,7 @@ CdStreamInitThread(void) |
|
|
|
|
|
#ifdef ONE_THREAD_PER_CHANNEL |
|
|
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) |
|
|
{ |
|
|
@@ -171,6 +171,7 @@ CdStreamInit(int32 numChannels) |
|
|
gNumImages = 0; |
|
|
|
|
|
gNumChannels = numChannels; |
|
|
ASSERT( gNumChannels != 0 ); |
|
|
|
|
|
gpReadInfo = (CdReadInfo *)calloc(numChannels, sizeof(CdReadInfo)); |
|
|
ASSERT( gpReadInfo != nil ); |
|
|
@@ -398,7 +399,12 @@ void *CdStreamThread(void *param) |
|
|
#ifndef ONE_THREAD_PER_CHANNEL |
|
|
while (gCdStreamThreadStatus != 2) { |
|
|
sem_wait(gCdStreamSema); |
|
|
|
|
|
int32 channel = GetFirstInQueue(&gChannelRequestQ); |
|
|
|
|
|
// spurious wakeup |
|
|
if (channel == -1) |
|
|
continue; |
|
|
#else |
|
|
int channel = *((int*)param); |
|
|
while (gpReadInfo[channel].nThreadStatus != 2){ |
|
|
|