diff options
author | David Zafman <david.zafman@inktank.com> | 2013-07-31 21:24:28 -0700 |
---|---|---|
committer | David Zafman <david.zafman@inktank.com> | 2013-07-31 21:25:20 -0700 |
commit | 317d6982354e2d8368a2bf752dd6df59f95d3975 (patch) | |
tree | 7726e2f722a6b3624017a7980d8be27e9254250c | |
parent | bf0061bf31c8ec889c7081522ccecf0e914f4488 (diff) | |
parent | 4a6eff88aa5c4727e6173b3a2a762f2448a38b1a (diff) | |
download | ceph-317d6982354e2d8368a2bf752dd6df59f95d3975.tar.gz |
Merge branch 'wip-5784' into next
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rwxr-xr-x | qa/workunits/rados/test_hang.sh | 8 | ||||
-rw-r--r-- | src/osdc/Objecter.cc | 5 | ||||
-rw-r--r-- | src/test/system/systest_runnable.cc | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/qa/workunits/rados/test_hang.sh b/qa/workunits/rados/test_hang.sh new file mode 100755 index 00000000000..724e0bb82a5 --- /dev/null +++ b/qa/workunits/rados/test_hang.sh @@ -0,0 +1,8 @@ +#!/bin/sh -ex + +# Hang forever for manual testing using the thrasher +while(true) +do + sleep 300 +done +exit 0 diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index b7530200298..2b1e7f9e41b 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -295,6 +295,7 @@ void Objecter::send_linger(LingerOp *info) // repeat send. cancel old registeration op, if any. if (ops.count(info->register_tid)) { Op *o = ops[info->register_tid]; + op_cancel_map_check(o); cancel_op(o); } info->register_tid = _op_submit(o); @@ -749,6 +750,7 @@ void Objecter::check_op_pool_dne(Op *op) void Objecter::_send_op_map_check(Op *op) { + assert(client_lock.is_locked()); // ask the monitor if (check_latest_map_ops.count(op->tid) == 0) { check_latest_map_ops[op->tid] = op; @@ -759,6 +761,7 @@ void Objecter::_send_op_map_check(Op *op) void Objecter::op_cancel_map_check(Op *op) { + assert(client_lock.is_locked()); map<tid_t, Op*>::iterator iter = check_latest_map_ops.find(op->tid); if (iter != check_latest_map_ops.end()) { @@ -1101,6 +1104,7 @@ void Objecter::tick() void Objecter::resend_mon_ops() { + assert(client_lock.is_locked()); ldout(cct, 10) << "resend_mon_ops" << dendl; for (map<tid_t,PoolStatOp*>::iterator p = poolstat_ops.begin(); p!=poolstat_ops.end(); ++p) { @@ -1400,6 +1404,7 @@ void Objecter::finish_op(Op *op) ops.erase(op->tid); logger->set(l_osdc_op_active, ops.size()); + assert(check_latest_map_ops.find(op->tid) == check_latest_map_ops.end()); delete op; } diff --git a/src/test/system/systest_runnable.cc b/src/test/system/systest_runnable.cc index c0bc977618f..ec9b823db14 100644 --- a/src/test/system/systest_runnable.cc +++ b/src/test/system/systest_runnable.cc @@ -229,9 +229,9 @@ set_argv(int argc, const char **argv) if (m_argv_orig != NULL) { for (int i = 0; i < m_argc; ++i) free((void*)(m_argv_orig[i])); - delete m_argv_orig; + delete[] m_argv_orig; m_argv_orig = NULL; - delete m_argv; + delete[] m_argv; m_argv = NULL; m_argc = 0; } |