1 // RequestPortPool.h 2 3 #ifndef USERLAND_FS_REQUEST_PORT_POOL_H 4 #define USERLAND_FS_REQUEST_PORT_POOL_H 5 6 #include <OS.h> 7 8 #include "Locker.h" 9 10 namespace UserlandFSUtil { 11 12 class RequestPort; 13 14 } 15 16 using UserlandFSUtil::RequestPort; 17 18 class RequestPortPool : public Locker { 19 public: 20 RequestPortPool(); 21 ~RequestPortPool(); 22 23 status_t InitCheck() const; 24 25 bool IsDisconnected() const; 26 27 status_t AddPort(RequestPort* port); 28 29 RequestPort* AcquirePort(); 30 void ReleasePort(RequestPort* port); 31 32 private: 33 friend class KernelDebug; 34 35 struct PortAcquirationInfo { 36 RequestPort* port; 37 thread_id owner; 38 int32 count; 39 }; 40 41 PortAcquirationInfo* fPorts; 42 int32 fPortCount; 43 int32 fFreePorts; 44 sem_id fFreePortSemaphore; 45 volatile bool fDisconnected; 46 }; 47 48 #endif // USERLAND_FS_REQUEST_PORT_POOL_H 49