aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/alDatabuffer.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-03-20 21:38:05 -0700
committerChris Robinson <[email protected]>2010-03-20 21:38:05 -0700
commit99f28f25b07e28415ce58fd552dcadf2a187c3e3 (patch)
tree45f9ca387fd88b95b013b022d91b004f6ffed91c /OpenAL32/alDatabuffer.c
parent27358c8ce8dcb9bc6d18c10b652784f068cb2ec2 (diff)
Avoid calling alDelete* from alGen*
Diffstat (limited to 'OpenAL32/alDatabuffer.c')
-rw-r--r--OpenAL32/alDatabuffer.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/OpenAL32/alDatabuffer.c b/OpenAL32/alDatabuffer.c
index 1f5302e6..f13bc34e 100644
--- a/OpenAL32/alDatabuffer.c
+++ b/OpenAL32/alDatabuffer.c
@@ -56,17 +56,27 @@ ALvoid AL_APIENTRY alGenDatabuffersEXT(ALsizei n,ALuint *puiBuffers)
* Databuffer Names) */
if(!IsBadWritePtr((void*)puiBuffers, n * sizeof(ALuint)))
{
+ ALdatabuffer *end;
ALdatabuffer **list = &device->DatabufferList;
while(*list)
list = &(*list)->next;
/* Create all the new Databuffers */
+ end = *list;
while(i < n)
{
*list = calloc(1, sizeof(ALdatabuffer));
if(!(*list))
{
- alDeleteDatabuffersEXT(i, puiBuffers);
+ while(end->next)
+ {
+ ALdatabuffer *temp = end->next;
+ end->next = temp->next;
+
+ ALTHUNK_REMOVEENTRY(temp->databuffer);
+ device->DatabufferCount--;
+ free(temp);
+ }
alSetError(Context, AL_OUT_OF_MEMORY);
break;
}