Support disconnect for OSS and Solaris

This commit is contained in:
Chris Robinson
2009-08-26 21:49:38 -07:00
parent 929b025fd6
commit 06c576a945
2 changed files with 26 additions and 22 deletions
+3 -1
View File
@@ -81,7 +81,7 @@ static ALuint OSSProc(ALvoid *ptr)
oss_data *data = (oss_data*)pDevice->ExtraData;
int wrote;
while(!data->killNow)
while(!data->killNow && !pDevice->Connected)
{
ALint len = data->data_size;
ALubyte *WritePtr = data->mix_data;
@@ -98,6 +98,7 @@ static ALuint OSSProc(ALvoid *ptr)
if(errno != EAGAIN && errno != EWOULDBLOCK)
{
AL_PRINT("write failed: %s\n", strerror(errno));
aluHandleDisconnect(pDevice);
len = 0;
}
else
@@ -129,6 +130,7 @@ static ALuint OSSCaptureProc(ALvoid *ptr)
if(amt < 0)
{
AL_PRINT("read failed: %s\n", strerror(errno));
aluHandleDisconnect(pDevice);
break;
}
if(amt == 0)
+23 -21
View File
@@ -56,32 +56,34 @@ static ALuint SolarisProc(ALvoid *ptr)
int remaining = 0;
int wrote;
while(!data->killNow)
while(!data->killNow && !pDevice->Connected)
{
int len = data->data_size - remaining;
ALint len = data->data_size;
ALubyte *WritePtr = data->mix_data;
if(len > 0)
{
SuspendContext(NULL);
aluMixData(pDevice->Context, data->mix_data+remaining, len, pDevice->Format);
ProcessContext(NULL);
}
SuspendContext(NULL);
aluMixData(pDevice->Context, WritePtr, len, pDevice->Format);
ProcessContext(NULL);
remaining += len;
wrote = write(data->fd, data->mix_data, remaining);
if(wrote < 0)
while(len > 0 && !data->killNow)
{
AL_PRINT("write failed: %s\n", strerror(errno));
remaining = 0;
wrote = write(data->fd, WritePtr, len);
if(wrote < 0)
{
if(errno != EAGAIN && errno != EWOULDBLOCK)
{
AL_PRINT("write failed: %s\n", strerror(errno));
aluHandleDisconnect(pDevice);
len = 0;
}
else
Sleep(1);
continue;
}
len -= wrote;
WritePtr += wrote;
}
else if(wrote > 0)
{
remaining -= wrote;
if(remaining > 0)
memmove(data->mix_data, data->mix_data+wrote, remaining);
}
else
Sleep(1);
}
return 0;