#ifndef USERLAND_FS_REQUEST_PORT_POOL_H
#define USERLAND_FS_REQUEST_PORT_POOL_H
#include <OS.h>
#include "Locker.h"
namespace UserlandFSUtil {
class RequestPort;
}
using UserlandFSUtil::RequestPort;
class RequestPortPool : public Locker {
public:
RequestPortPool();
~RequestPortPool();
status_t InitCheck() const;
bool IsDisconnected() const;
status_t AddPort(RequestPort* port);
RequestPort* AcquirePort();
void ReleasePort(RequestPort* port);
private:
friend class KernelDebug;
struct PortAcquirationInfo {
RequestPort* port;
thread_id owner;
int32 count;
};
PortAcquirationInfo* fPorts;
int32 fPortCount;
int32 fFreePorts;
sem_id fFreePortSemaphore;
volatile bool fDisconnected;
};
#endif