This is an automated email from the ASF dual-hosted git repository. jpeach pushed a commit to branch master in repository https://git-dual.apache.org/repos/asf/trafficserver.git
commit a95fdf3b67f2715d7a213523de8efbd7150f3a7e Author: James Peach <[email protected]> AuthorDate: Sat May 7 14:05:50 2016 -0700 TS-4425: Switch the remainder of proxy/ over to Ptr::get(). --- proxy/CacheControl.cc | 2 +- proxy/CoreUtils.cc | 4 ++-- proxy/CoreUtils.h | 2 ++ proxy/FetchSM.cc | 16 +++++++++------- proxy/ICP.cc | 20 ++++++++++---------- proxy/ICP.h | 10 +++++----- proxy/ICPConfig.cc | 4 ++-- proxy/InkAPI.cc | 16 +++++++++++----- proxy/InkAPIInternal.h | 2 +- proxy/PluginVC.cc | 4 ++-- proxy/ReverseProxy.cc | 2 +- proxy/SocksProxy.cc | 2 +- proxy/Transform.cc | 2 +- proxy/congest/MT_hashtable.h | 3 ++- proxy/http/HttpCacheSM.h | 2 +- proxy/http/HttpProxyServerMain.cc | 5 ++--- proxy/http/HttpSM.cc | 8 ++++---- proxy/http/HttpSessionManager.cc | 4 ++-- proxy/http/HttpTunnel.cc | 2 +- proxy/http/HttpTunnel.h | 2 +- proxy/http2/Http2ClientSession.h | 2 +- 21 files changed, 62 insertions(+), 52 deletions(-) diff --git a/proxy/CacheControl.cc b/proxy/CacheControl.cc index d344979..5f95c70 100644 --- a/proxy/CacheControl.cc +++ b/proxy/CacheControl.cc @@ -99,7 +99,7 @@ struct CC_UpdateContinuation : public Continuation { delete this; return EVENT_DONE; } - CC_UpdateContinuation(ProxyMutex *m) : Continuation(m) { SET_HANDLER(&CC_UpdateContinuation::file_update_handler); } + CC_UpdateContinuation(Ptr<ProxyMutex> &m) : Continuation(m) { SET_HANDLER(&CC_UpdateContinuation::file_update_handler); } }; int diff --git a/proxy/CoreUtils.cc b/proxy/CoreUtils.cc index 3267bb7..8724d28 100644 --- a/proxy/CoreUtils.cc +++ b/proxy/CoreUtils.cc @@ -743,8 +743,8 @@ CoreUtils::process_EThread(EThread *eth_test) ats_free(buf); } -static void -print_netstate(NetState *n) +void +CoreUtils::print_netstate(NetState *n) { printf(" enabled: %d\n", n->enabled); printf(" op: %d _cont: 0x%p\n", n->vio.op, n->vio._cont); diff --git a/proxy/CoreUtils.h b/proxy/CoreUtils.h index b9987b8..cd7e0da 100644 --- a/proxy/CoreUtils.h +++ b/proxy/CoreUtils.h @@ -92,6 +92,7 @@ class HdrHeap; class EThread; class UnixNetVConnection; +struct NetState; class CoreUtils { @@ -185,6 +186,7 @@ public: * outputs: none **********************************************************************/ static void print_http_hdr(HTTPHdr *h, const char *name); + static void print_netstate(NetState *n); /********************************************************************** * purpose: loads a null terminated string from the core file diff --git a/proxy/FetchSM.cc b/proxy/FetchSM.cc index 1a94b39..2c35049 100644 --- a/proxy/FetchSM.cc +++ b/proxy/FetchSM.cc @@ -343,12 +343,10 @@ out: } void -FetchSM::get_info_from_buffer(IOBufferReader *the_reader) +FetchSM::get_info_from_buffer(IOBufferReader *reader) { char *buf, *info; int64_t read_avail, read_done; - IOBufferBlock *blk; - IOBufferReader *reader = the_reader; if (!reader) { client_bytes = 0; @@ -369,9 +367,11 @@ FetchSM::get_info_from_buffer(IOBufferReader *the_reader) if (!(fetch_flags & TS_FETCH_FLAGS_STREAM) || !check_chunked()) { /* Read the data out of the reader */ while (read_avail > 0) { - if (reader->block != NULL) + if (reader->block) { reader->skip_empty_blocks(); - blk = reader->block; + } + + IOBufferBlock *blk = reader->block.get(); // This is the equivalent of TSIOBufferBlockReadStart() buf = blk->start() + reader->start_offset; @@ -401,9 +401,11 @@ FetchSM::get_info_from_buffer(IOBufferReader *the_reader) /* Read the data out of the reader */ read_avail = reader->read_avail(); while (read_avail > 0) { - if (reader->block != NULL) + if (reader->block) { reader->skip_empty_blocks(); - blk = reader->block; + } + + IOBufferBlock *blk = reader->block.get(); // This is the equivalent of TSIOBufferBlockReadStart() buf = blk->start() + reader->start_offset; diff --git a/proxy/ICP.cc b/proxy/ICP.cc index 5442331..3a48cb3 100644 --- a/proxy/ICP.cc +++ b/proxy/ICP.cc @@ -526,7 +526,7 @@ ICPPeerReadCont::PeerReadStateMachine(PeerReadData *s, Event *e) if (!_ICPpr->Lock()) return EVENT_CONT; // unable to get lock, try again later - bool valid_peer = (_ICPpr->IdToPeer(s->_peer->GetPeerID()) == s->_peer); + bool valid_peer = (_ICPpr->IdToPeer(s->_peer->GetPeerID()) == s->_peer.get()); if (valid_peer && _ICPpr->AllowICPQueries() && _ICPpr->GetConfig()->globalConfig()->ICPconfigured()) { // Note pending incoming ICP request or response @@ -553,7 +553,7 @@ ICPPeerReadCont::PeerReadStateMachine(PeerReadData *s, Event *e) // Assumption of one outstanding read per peer... // Setup read from FD - ink_assert(s->_peer->buf == NULL); + ink_assert(!s->_peer->buf); Ptr<IOBufferBlock> buf = s->_peer->buf = new_IOBufferBlock(); buf->alloc(ICPHandlerCont::ICPDataBuf_IOBuffer_sizeindex); s->_peer->fromaddrlen = sizeof(s->_peer->fromaddr); @@ -563,7 +563,8 @@ ICPPeerReadCont::PeerReadStateMachine(PeerReadData *s, Event *e) s->_next_state = READ_DATA_DONE; RECORD_ICP_STATE_CHANGE(s, 0, READ_DATA_DONE); ink_assert(s->_peer->readAction == NULL); - Action *a = s->_peer->RecvFrom_re(this, this, buf, buf->write_avail() - 1, &s->_peer->fromaddr.sa, &s->_peer->fromaddrlen); + Action *a = + s->_peer->RecvFrom_re(this, this, buf.get(), buf->write_avail() - 1, &s->_peer->fromaddr.sa, &s->_peer->fromaddrlen); if (!a) { a = ACTION_IO_ERROR; } @@ -702,7 +703,7 @@ ICPPeerReadCont::PeerReadStateMachine(PeerReadData *s, Event *e) // we hand off the decoded buffer from the Peer to the PeerReadData s->_sender = from; s->_rICPmsg_len = s->_bytesReceived; - ink_assert(s->_buf == NULL); + ink_assert(!s->_buf); s->_buf = s->_peer->buf; s->_rICPmsg = (ICPMsg_t *)s->_buf->start(); s->_peer->buf = NULL; @@ -2044,7 +2045,7 @@ ICPProcessor::SetupListenSockets() int index; ip_port_text_buffer ipb, ipb2; for (index = 0; index < (_nPeerList + 1); ++index) { - if ((P = _PeerList[index])) { + if ((P = _PeerList[index].get())) { if ((P->GetType() == PEER_PARENT) || (P->GetType() == PEER_SIBLING)) { ParentSiblingPeer *pPS = (ParentSiblingPeer *)P; @@ -2078,7 +2079,7 @@ ICPProcessor::SetupListenSockets() // We funnel all unicast sends and receives through // the local peer UDP socket. // - ParentSiblingPeer *pPS = (ParentSiblingPeer *)((Peer *)_LocalPeer); + ParentSiblingPeer *pPS = (ParentSiblingPeer *)(GetLocalPeer()); NetVCOptions options; options.local_ip.assign(pPS->GetIP()); @@ -2105,9 +2106,8 @@ ICPProcessor::ShutdownListenSockets() ink_assert(!PendingQuery()); Peer *P; - int index; - for (index = 0; index < (_nPeerList + 1); ++index) { - if ((P = _PeerList[index])) { + for (int index = 0; index < (_nPeerList + 1); ++index) { + if ((P = IdToPeer(index))) { if (P->GetType() == PEER_LOCAL) { ParentSiblingPeer *pPS = (ParentSiblingPeer *)P; (void)pPS->GetChan()->close(); @@ -2253,7 +2253,7 @@ ICPProcessor::GenericFindListPeer(IpAddr const &ip, uint16_t port, int validList Peer *P; port = htons(port); for (int n = 0; n < validListItems; ++n) { - if ((P = List[n])) { + if ((P = List[n].get())) { if ((P->GetIP() == ip) && ((port == 0) || (ats_ip_port_cast(P->GetIP()) == port))) return P; } diff --git a/proxy/ICP.h b/proxy/ICP.h index f90e9f8..5c282e2 100644 --- a/proxy/ICP.h +++ b/proxy/ICP.h @@ -818,12 +818,12 @@ public: inline Peer * GetLocalPeer() { - return _LocalPeer; + return _LocalPeer.get(); } inline Peer * IdToPeer(int id) { - return _PeerList[id]; + return _PeerList[id].get(); } inline ICPConfiguration * GetConfig() @@ -918,7 +918,7 @@ private: inline Peer * GetNthSendPeer(int n, int bias) { - return _SendPeerList[(bias + n) % (_nSendPeerList + 1)]; + return _SendPeerList[(bias + n) % (_nSendPeerList + 1)].get(); } inline int @@ -929,7 +929,7 @@ private: inline Peer * GetNthRecvPeer(int n, int bias) { - return _RecvPeerList[(bias + n) % (_nRecvPeerList + 1)]; + return _RecvPeerList[(bias + n) % (_nRecvPeerList + 1)].get(); } inline int @@ -951,7 +951,7 @@ private: inline Peer * GetNthParentPeer(int n, int bias) { - return _ParentPeerList[(bias + n) % (_nParentPeerList + 1)]; + return _ParentPeerList[(bias + n) % (_nParentPeerList + 1)].get(); } inline int GetStartingParentPeerBias() diff --git a/proxy/ICPConfig.cc b/proxy/ICPConfig.cc index f668ac7..d3f12fa 100644 --- a/proxy/ICPConfig.cc +++ b/proxy/ICPConfig.cc @@ -1028,7 +1028,7 @@ Action * MultiCastPeer::RecvFrom_re(Continuation *cont, void *token, IOBufferBlock * /* bufblock ATS_UNUSED */, int len, struct sockaddr *from, socklen_t *fromlen) { - Action *a = udpNet.recvfrom_re(cont, token, _recv_chan.fd, from, fromlen, buf, len, true, 0); + Action *a = udpNet.recvfrom_re(cont, token, _recv_chan.fd, from, fromlen, buf.get(), len, true, 0); return a; } @@ -1431,7 +1431,7 @@ ICPProcessor::DumpICPConfig() GetConfig()->globalConfig()->ICPReplyToUnknownPeer(), GetConfig()->globalConfig()->ICPDefaultReplyPort()); for (int i = 0; i < (_nPeerList + 1); i++) { - P = _PeerList[i]; + P = IdToPeer(i); id = P->GetPeerID(); type = P->GetType(); const char *str_type; diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc index 00b544d..e29ad00 100644 --- a/proxy/InkAPI.cc +++ b/proxy/InkAPI.cc @@ -646,6 +646,12 @@ sdk_sanity_check_null_ptr(void *ptr) return TS_SUCCESS; } +static TSReturnCode +sdk_sanity_check_mutex(Ptr<ProxyMutex> &m) +{ + return m ? TS_SUCCESS : TS_ERROR; +} + /** The function checks if the buffer is Modifiable and returns true if it is modifiable, else returns false. @@ -4354,7 +4360,7 @@ TSContMutexGet(TSCont contp) sdk_assert(sdk_sanity_check_iocore_structure(contp) == TS_SUCCESS); Continuation *c = (Continuation *)contp; - return (TSMutex)((ProxyMutex *)c->mutex); + return (TSMutex)(c->mutex.get()); } /* HTTP hooks */ @@ -6418,7 +6424,7 @@ TSHttpTxnServerIntercept(TSCont contp, TSHttpTxn txnp) INKContInternal *i = (INKContInternal *)contp; // Must have a mutex - sdk_assert(sdk_sanity_check_null_ptr((void *)i->mutex) == TS_SUCCESS); + sdk_assert(sdk_sanity_check_mutex(i->mutex) == TS_SUCCESS); http_sm->plugin_tunnel_type = HTTP_PLUGIN_AS_SERVER; http_sm->plugin_tunnel = PluginVCCore::alloc(); @@ -6435,7 +6441,7 @@ TSHttpTxnIntercept(TSCont contp, TSHttpTxn txnp) INKContInternal *i = (INKContInternal *)contp; // Must have a mutex - sdk_assert(sdk_sanity_check_null_ptr((void *)i->mutex) == TS_SUCCESS); + sdk_assert(sdk_sanity_check_mutex(i->mutex) == TS_SUCCESS); http_sm->plugin_tunnel_type = HTTP_PLUGIN_AS_INTERCEPT; http_sm->plugin_tunnel = PluginVCCore::alloc(); @@ -7536,7 +7542,7 @@ TSAIORead(int fd, off_t offset, char *buf, size_t buffSize, TSCont contp) pAIO->aiocb.aio_buf = buf; pAIO->action = pCont; - pAIO->thread = ((ProxyMutex *)pCont->mutex)->thread_holding; + pAIO->thread = pCont->mutex->thread_holding; if (ink_aio_read(pAIO, 1) == 1) return TS_SUCCESS; @@ -7574,7 +7580,7 @@ TSAIOWrite(int fd, off_t offset, char *buf, const size_t bufSize, TSCont contp) pAIO->aiocb.aio_buf = buf; pAIO->aiocb.aio_nbytes = bufSize; pAIO->action = pCont; - pAIO->thread = ((ProxyMutex *)pCont->mutex)->thread_holding; + pAIO->thread = pCont->mutex->thread_holding; if (ink_aio_write(pAIO, 1) == 1) return TS_SUCCESS; diff --git a/proxy/InkAPIInternal.h b/proxy/InkAPIInternal.h index 9c42436..7908d1f 100644 --- a/proxy/InkAPIInternal.h +++ b/proxy/InkAPIInternal.h @@ -307,7 +307,7 @@ public: int event_handler(int, void *) { - if (m_cont->mutex != NULL) { + if (m_cont->mutex) { MUTEX_TRY_LOCK(trylock, m_cont->mutex, this_ethread()); if (!trylock.is_locked()) { eventProcessor.schedule_in(this, HRTIME_MSECONDS(10), ET_TASK); diff --git a/proxy/PluginVC.cc b/proxy/PluginVC.cc index a0ec05d..7510c59 100644 --- a/proxy/PluginVC.cc +++ b/proxy/PluginVC.cc @@ -145,7 +145,7 @@ PluginVC::main_handler(int event, void *data) return 0; } - if (read_side_mutex.m_ptr != read_state.vio.mutex.m_ptr) { + if (read_side_mutex != read_state.vio.mutex) { // It's possible some swapped the mutex on us before // we were able to grab it Mutex_unlock(read_side_mutex, my_ethread); @@ -167,7 +167,7 @@ PluginVC::main_handler(int event, void *data) return 0; } - if (write_side_mutex.m_ptr != write_state.vio.mutex.m_ptr) { + if (write_side_mutex != write_state.vio.mutex) { // It's possible some swapped the mutex on us before // we were able to grab it Mutex_unlock(write_side_mutex, my_ethread); diff --git a/proxy/ReverseProxy.cc b/proxy/ReverseProxy.cc index 43af4ed..3595f52 100644 --- a/proxy/ReverseProxy.cc +++ b/proxy/ReverseProxy.cc @@ -132,7 +132,7 @@ struct UR_UpdateContinuation : public Continuation { delete this; return EVENT_DONE; } - UR_UpdateContinuation(ProxyMutex *m) : Continuation(m) + UR_UpdateContinuation(Ptr<ProxyMutex> &m) : Continuation(m) { SET_HANDLER((UR_UpdContHandler)&UR_UpdateContinuation::file_update_handler); } diff --git a/proxy/SocksProxy.cc b/proxy/SocksProxy.cc index 091c1cd..cd283b3 100644 --- a/proxy/SocksProxy.cc +++ b/proxy/SocksProxy.cc @@ -347,7 +347,7 @@ SocksProxy::mainEvent(int event, void *data) OneWayTunnel *s_to_c = OneWayTunnel::OneWayTunnel_alloc(); c_to_s->init(clientVC, serverVC, NULL, clientVIO, reader); - s_to_c->init(serverVC, clientVC, /*aCont = */ NULL, 0 /*best guess */, c_to_s->mutex); + s_to_c->init(serverVC, clientVC, /*aCont = */ NULL, 0 /*best guess */, c_to_s->mutex.get()); OneWayTunnel::SetupTwoWayTunnel(c_to_s, s_to_c); diff --git a/proxy/Transform.cc b/proxy/Transform.cc index 86dcb18..6d395c3 100644 --- a/proxy/Transform.cc +++ b/proxy/Transform.cc @@ -385,7 +385,7 @@ TransformTerminus::reenable(VIO *vio) -------------------------------------------------------------------------*/ TransformVConnection::TransformVConnection(Continuation *cont, APIHook *hooks) - : TransformVCChain(cont->mutex), m_cont(cont), m_terminus(this), m_closed(0) + : TransformVCChain(cont->mutex.get()), m_cont(cont), m_terminus(this), m_closed(0) { INKVConnInternal *xform; diff --git a/proxy/congest/MT_hashtable.h b/proxy/congest/MT_hashtable.h index 12cebb9..62666f6 100644 --- a/proxy/congest/MT_hashtable.h +++ b/proxy/congest/MT_hashtable.h @@ -347,10 +347,11 @@ public: delete hashTables[i]; } } + ProxyMutex * lock_for_key(key_t key) { - return locks[part_num(key)]; + return locks[part_num(key)].get(); } int diff --git a/proxy/http/HttpCacheSM.h b/proxy/http/HttpCacheSM.h index e5a9a5f..77b349a 100644 --- a/proxy/http/HttpCacheSM.h +++ b/proxy/http/HttpCacheSM.h @@ -60,7 +60,7 @@ public: HttpCacheSM(); void - init(HttpSM *sm_arg, ProxyMutex *amutex) + init(HttpSM *sm_arg, Ptr<ProxyMutex> &amutex) { master_sm = sm_arg; mutex = amutex; diff --git a/proxy/http/HttpProxyServerMain.cc b/proxy/http/HttpProxyServerMain.cc index 76c0925..e59cce2 100644 --- a/proxy/http/HttpProxyServerMain.cc +++ b/proxy/http/HttpProxyServerMain.cc @@ -266,9 +266,8 @@ init_HttpProxyServer(int n_accept_threads) plugin_http_transparent_accept = new HttpSessionAccept(ha_opt); plugin_http_transparent_accept->mutex = new_ProxyMutex(); } - if (ssl_plugin_mutex == NULL) { - ssl_plugin_mutex = mutexAllocator.alloc(); - ssl_plugin_mutex->init("SSL Acceptor List"); + if (!ssl_plugin_mutex) { + ssl_plugin_mutex = new_ProxyMutex(); } // Do the configuration defined ports. diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 66c684a..1024a66 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -2078,7 +2078,7 @@ HttpSM::process_srv_info(HostDBInfo *r) HostDBRoundRobin *rr = r->rr(); HostDBInfo *srv = NULL; if (rr) { - srv = rr->select_best_srv(t_state.dns_info.srv_hostname, &mutex.m_ptr->thread_holding->generator, ink_cluster_time(), + srv = rr->select_best_srv(t_state.dns_info.srv_hostname, &mutex->thread_holding->generator, ink_cluster_time(), (int)t_state.txn_conf->down_server_timeout); } if (!srv) { @@ -4464,7 +4464,7 @@ HttpSM::do_range_setup_if_necessary() content_type = t_state.cache_info.object_read->response_get()->value_get(MIME_FIELD_CONTENT_TYPE, MIME_LEN_CONTENT_TYPE, &field_content_type_len); // create a Range: transform processor for requests of type Range: bytes=1-2,4-5,10-100 (eg. multiple ranges) - range_trans = transformProcessor.range_transform(mutex, t_state.ranges, t_state.num_range_fields, + range_trans = transformProcessor.range_transform(mutex.get(), t_state.ranges, t_state.num_range_fields, &t_state.hdr_info.transform_response, content_type, field_content_type_len, t_state.cache_info.object_read->object_size_get()); api_hooks.append(TS_HTTP_RESPONSE_TRANSFORM_HOOK, range_trans); @@ -5055,7 +5055,7 @@ HttpSM::do_post_transform_open() ink_assert(post_transform_info.vc == NULL); if (is_action_tag_set("http_post_nullt")) { - txn_hook_prepend(TS_HTTP_REQUEST_TRANSFORM_HOOK, transformProcessor.null_transform(mutex)); + txn_hook_prepend(TS_HTTP_REQUEST_TRANSFORM_HOOK, transformProcessor.null_transform(mutex.get())); } post_transform_info.vc = transformProcessor.open(this, api_hooks.get(TS_HTTP_REQUEST_TRANSFORM_HOOK)); @@ -5076,7 +5076,7 @@ HttpSM::do_transform_open() APIHook *hooks; if (is_action_tag_set("http_nullt")) { - txn_hook_prepend(TS_HTTP_RESPONSE_TRANSFORM_HOOK, transformProcessor.null_transform(mutex)); + txn_hook_prepend(TS_HTTP_RESPONSE_TRANSFORM_HOOK, transformProcessor.null_transform(mutex.get())); } hooks = api_hooks.get(TS_HTTP_RESPONSE_TRANSFORM_HOOK); diff --git a/proxy/http/HttpSessionManager.cc b/proxy/http/HttpSessionManager.cc index 004beaa..bfc1005 100644 --- a/proxy/http/HttpSessionManager.cc +++ b/proxy/http/HttpSessionManager.cc @@ -279,8 +279,8 @@ HttpSessionManager::acquire_session(Continuation * /* cont ATS_UNUSED */, sockad // Now check to see if we have a connection in our shared connection pool EThread *ethread = this_ethread(); ProxyMutex *pool_mutex = (TS_SERVER_SESSION_SHARING_POOL_THREAD == sm->t_state.http_config_param->server_session_sharing_pool) ? - ethread->server_session_pool->mutex : - m_g_pool->mutex; + ethread->server_session_pool->mutex.get() : + m_g_pool->mutex.get(); MUTEX_TRY_LOCK(lock, pool_mutex, ethread); if (lock.is_locked()) { if (TS_SERVER_SESSION_SHARING_POOL_THREAD == sm->t_state.http_config_param->server_session_sharing_pool) { diff --git a/proxy/http/HttpTunnel.cc b/proxy/http/HttpTunnel.cc index adc84ae..222a4a3 100644 --- a/proxy/http/HttpTunnel.cc +++ b/proxy/http/HttpTunnel.cc @@ -534,7 +534,7 @@ HttpTunnel::HttpTunnel() } void -HttpTunnel::init(HttpSM *sm_arg, ProxyMutex *amutex) +HttpTunnel::init(HttpSM *sm_arg, Ptr<ProxyMutex> &amutex) { HttpConfigParams *params = sm_arg->t_state.http_config_param; sm = sm_arg; diff --git a/proxy/http/HttpTunnel.h b/proxy/http/HttpTunnel.h index c4fce16..7cc4a0f 100644 --- a/proxy/http/HttpTunnel.h +++ b/proxy/http/HttpTunnel.h @@ -300,7 +300,7 @@ class HttpTunnel : public Continuation public: HttpTunnel(); - void init(HttpSM *sm_arg, ProxyMutex *amutex); + void init(HttpSM *sm_arg, Ptr<ProxyMutex> &amutex); void reset(); void kill_tunnel(); bool diff --git a/proxy/http2/Http2ClientSession.h b/proxy/http2/Http2ClientSession.h index b0ddc69..bfb156f 100644 --- a/proxy/http2/Http2ClientSession.h +++ b/proxy/http2/Http2ClientSession.h @@ -124,7 +124,7 @@ public: xmit(MIOBuffer *iobuffer) { if (ioblock) { - iobuffer->append_block(this->ioblock); + iobuffer->append_block(this->ioblock.get()); } else { iobuffer->write(this->hdr.raw, sizeof(this->hdr.raw)); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
