kernel/events: Fix double-free in create_select_sync.
The wait_for_objects_sync destructor already deletes the set. Fixes #19566.
This commit is contained in:
@@ -363,34 +363,27 @@ fd_zero(fd_set *set, int numFDs)
|
||||
static status_t
|
||||
create_select_sync(int numFDs, wait_for_objects_sync*& _sync)
|
||||
{
|
||||
// create sync structure
|
||||
wait_for_objects_sync* sync = new(nothrow) wait_for_objects_sync;
|
||||
if (sync == NULL)
|
||||
return B_NO_MEMORY;
|
||||
ObjectDeleter<wait_for_objects_sync> syncDeleter(sync);
|
||||
|
||||
// create info set
|
||||
sync->set = new(nothrow) select_info[numFDs];
|
||||
if (sync->set == NULL)
|
||||
return B_NO_MEMORY;
|
||||
ArrayDeleter<select_info> setDeleter(sync->set);
|
||||
sync->count = numFDs;
|
||||
|
||||
// create select event semaphore
|
||||
sync->sem = create_sem(0, "select");
|
||||
if (sync->sem < 0)
|
||||
return sync->sem;
|
||||
|
||||
sync->count = numFDs;
|
||||
|
||||
for (int i = 0; i < numFDs; i++) {
|
||||
sync->set[i].next = NULL;
|
||||
sync->set[i].sync = sync;
|
||||
}
|
||||
|
||||
setDeleter.Detach();
|
||||
syncDeleter.Detach();
|
||||
_sync = sync;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user