procedure TBoundedBuffer.ResetState;
 
{ Cirra los manejadores y libera la memoria.
† Nůtese que esto debe desbloquear los hilos de modo que terminen limpiamente. }
 
var
SemCount: integer;
 
begin
if FBufInit then
begin
††† WaitForSingleObject(FCriticalMutex, DefaultWaitTime);
††† FBufInit := false;
††† FBufSize := 0;
††† FreeMem(FBuf);
††† repeat
††††† ReleaseSemaphore(FEntriesFree, 1, @SemCount);
††† until SemCount = 0;
††† repeat
††††† ReleaseSemaphore(FEntriesUsed, 1, @SemCount);
††† until SemCount = 0;
††† CloseHandle(FEntriesFree);
††† CloseHandle(FEntriesUsed);
††† CloseHandle(FCriticalMutex);
end;
end;