X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/3abd3952c1f4441f0dd6eae9883b2d01ed9cd56b..3615d9bf0b254442e2fddee45475dbd634cf703a:/rpc/connection.h diff --git a/rpc/connection.h b/rpc/connection.h index 3e19a93..7032b8c 100644 --- a/rpc/connection.h +++ b/rpc/connection.h @@ -16,11 +16,11 @@ class connection; class chanmgr { public: - virtual bool got_pdu(connection *c, const string & b) = 0; + virtual bool got_pdu(const shared_ptr & c, const string & b) = 0; virtual ~chanmgr() {} }; -class connection : public aio_callback { +class connection : public aio_callback, public enable_shared_from_this { public: struct charbuf { string buf; @@ -31,18 +31,14 @@ class connection : public aio_callback { ~connection(); int channo() { return fd_; } - bool isdead(); + bool isdead() { lock ml(m_); return dead_; } void closeconn(); bool send(const string & b); void write_cb(int s); void read_cb(int s); - void incref(); - void decref(); - int ref() { lock rl(ref_m_); return refno_; } - - int compare(connection *another); + time_point create_time() const { return create_time_; } private: @@ -59,11 +55,9 @@ class connection : public aio_callback { time_point create_time_; int waiters_ = 0; - int refno_ = 1; int lossy_ = 0; mutex m_; - mutex ref_m_; cond send_complete_; cond send_wait_; }; @@ -83,7 +77,7 @@ class tcpsconn { socket_t tcp_; // listens for connections chanmgr *mgr_; int lossy_; - map conns_; + map> conns_; void process_accept(); }; @@ -95,5 +89,5 @@ struct bundle { int lossy; }; -connection *connect_to_dst(const sockaddr_in &dst, chanmgr *mgr, int lossy=0); +shared_ptr connect_to_dst(const sockaddr_in &dst, chanmgr *mgr, int lossy=0); #endif