"fixed" uninitialized memory usage/data race in osd_work_item_wait (nw)

appears to be a Linux-only issue
This commit is contained in:
Oliver Stöneberg 2015-01-01 15:02:21 +01:00
parent 5d5a89726c
commit 0c0260ec2d
2 changed files with 11 additions and 3 deletions

View File

@ -428,6 +428,11 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
return NULL;
item->event = NULL;
item->queue = queue;
item->done = FALSE;
}
else
{
atomic_exchange32(&item->done, FALSE); // needs to be set this way to prevent data race/usage of uninitialized memory on Linux
}
// fill in the basics
@ -436,7 +441,6 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
item->param = parambase;
item->result = NULL;
item->flags = flags;
atomic_exchange32(&item->done, FALSE);
// advance to the next
lastitem = item;

View File

@ -438,6 +438,11 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
return NULL;
item->event = NULL;
item->queue = queue;
item->done = FALSE;
}
else
{
atomic_exchange32(&item->done, FALSE); // needs to be set this way to prevent data race/usage of uninitialized memory on Linux
}
// fill in the basics
@ -445,8 +450,7 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
item->callback = callback;
item->param = parambase;
item->result = NULL;
item->flags = flags;
atomic_exchange32(&item->done, FALSE);
item->flags = flags;
// advance to the next
lastitem = item;