From e4a188b9f51b48d8369123e37507fe6512cad97b Mon Sep 17 00:00:00 2001 From: sage Date: Fri, 22 Sep 2006 17:09:09 +0000 Subject: [PATCH] fixed stupid evil memory bug thing git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@872 29311d96-e01e-0410-9327-a35deaab8ce9 --- ceph/osd/OSD.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ceph/osd/OSD.cc b/ceph/osd/OSD.cc index d3613535d01..9008d3a54c3 100644 --- a/ceph/osd/OSD.cc +++ b/ceph/osd/OSD.cc @@ -238,6 +238,8 @@ int OSD::init() osd_logtype.add_set("numpg"); osd_logtype.add_set("pingset"); + osd_logtype.add_set("buf"); + osd_logtype.add_inc("map"); osd_logtype.add_inc("mapi"); osd_logtype.add_inc("mapidup"); @@ -2083,6 +2085,10 @@ public: assert(!acked); acked = true; if (waiting) cond.Signal(); + + // discard my reference to buffer + op->get_data().clear(); + lock.Unlock(); } }; @@ -2232,6 +2238,10 @@ void OSD::handle_op(MOSDOp *op) const pg_t pgid = op->get_pg(); PG *pg = get_pg(pgid); + + logger->set("buf", buffer_total_alloc); + + // require same or newer map if (!require_same_or_newer_map(op, op->get_map_epoch())) return; @@ -2736,6 +2746,9 @@ void OSD::put_repop_gather(PG *pg, PG::RepOpGather *repop) if (r) dout(-10) << "put_repop apply transaction return " << r << " on " << *repop << endl; + // discard my reference to buffer + repop->op->get_data().clear(); + // send ack MOSDOpReply *reply = new MOSDOpReply(repop->op, 0, osdmap->get_epoch(), false); dout(10) << "put_repop sending ack on " << *repop << " " << reply << endl; @@ -3146,6 +3159,7 @@ void OSD::prepare_op_transaction(ObjectStore::Transaction& t, bufferlist bl; bl.claim( op->get_data() ); // give buffers to store; we keep *op in memory for a long time! + //if (oid < 100000000000000ULL) // hack hack-- don't write client data t.write( oid, op->get_offset(), op->get_length(), bl ); } break;