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:
Augustin Cavalier
2025-09-19 13:17:04 -04:00
parent dc64aa7e6d
commit db179db57b
@@ -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;
}