X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5fd8cc8409d0efadc07dfe8d6774ad9ff477663d..603bac8fcb3697f283e6537d81b4a92e457ebbad:/handle.h diff --git a/handle.h b/handle.h index ecd8884..d4b6223 100644 --- a/handle.h +++ b/handle.h @@ -1,5 +1,5 @@ // manage a cache of RPC connections. -// assuming cid is a std::string holding the +// assuming cid is a string holding the // host:port of the RPC server you want // to talk to: // @@ -23,57 +23,38 @@ #ifndef handle_h #define handle_h -#include -#include -#include "rpc.h" +#include "types.h" +#include "rpc/rpc.h" -struct hinfo { - rpcc *cl; - int refcnt; - bool del; - std::string m; - pthread_mutex_t cl_mutex; -}; +class hinfo; class handle { - private: - struct hinfo *h; - public: - handle(std::string m); - ~handle(); - /* safebind will try to bind with the rpc server on the first call. - * Since bind may block, the caller probably should not hold a mutex - * when calling safebind. - * - * return: - * if the first safebind succeeded, all later calls would return - * a rpcc object; otherwise, all later calls would return NULL. - * - * Example: - * handle h(dst); - * XXX_protocol::status ret; - * if (h.safebind()) { - * ret = h.safebind()->call(...); - * } - * if (!h.safebind() || ret != XXX_protocol::OK) { - * // handle failure - * } - */ - rpcc *safebind(); -}; - -class handle_mgr { - private: - pthread_mutex_t handle_mutex; - std::map hmap; - public: - handle_mgr(); - struct hinfo *get_handle(std::string m); - void done_handle(struct hinfo *h); - void delete_handle(std::string m); - void delete_handle_wo(std::string m); + private: + hinfo *h; + public: + handle(const string & m); + ~handle(); + /* safebind will try to bind with the rpc server on the first call. + * Since bind may block, the caller probably should not hold a mutex + * when calling safebind. + * + * return: + * if the first safebind succeeded, all later calls would return + * a rpcc object; otherwise, all later calls would return NULL. + * + * Example: + * handle h(dst); + * XXX_protocol::status ret; + * if (h.safebind()) { + * ret = h.safebind()->call(...); + * } + * if (!h.safebind() || ret != XXX_protocol::OK) { + * // handle failure + * } + */ + rpcc *safebind(); }; -extern class handle_mgr mgr; +void invalidate_handle(const string & m); #endif