From 8cd9a52477b4cffdbd73d0eb872e8187c76ce053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 29 Oct 2009 08:08:31 +0000 Subject: [PATCH] * delete_owned_ports() did not maintain the sUsedPorts variable, and thus led to bug #4864. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33823 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/port.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/system/kernel/port.cpp b/src/system/kernel/port.cpp index 3d217b3fce..afee3b3cf6 100644 --- a/src/system/kernel/port.cpp +++ b/src/system/kernel/port.cpp @@ -606,10 +606,25 @@ delete_owned_ports(struct team* team) list_move_to_list(&team->port_list, &queue); } + int32 firstSlot = sMaxPorts; + int32 count = 0; + while (port_entry* port = (port_entry*)list_remove_head_item(&queue)) { + if (firstSlot > port->id % sMaxPorts) + firstSlot = port->id % sMaxPorts; + count++; + MutexLocker locker(port->lock); uninit_port_locked(*port); } + + MutexLocker _(sPortsLock); + + // update the first free slot hint in the array + if (firstSlot < sFirstFreeSlot) + sFirstFreeSlot = firstSlot; + + sUsedPorts -= count; }