summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zafman <david.zafman@inktank.com>2013-07-31 21:24:28 -0700
committerDavid Zafman <david.zafman@inktank.com>2013-07-31 21:25:20 -0700
commit317d6982354e2d8368a2bf752dd6df59f95d3975 (patch)
tree7726e2f722a6b3624017a7980d8be27e9254250c
parentbf0061bf31c8ec889c7081522ccecf0e914f4488 (diff)
parent4a6eff88aa5c4727e6173b3a2a762f2448a38b1a (diff)
downloadceph-317d6982354e2d8368a2bf752dd6df59f95d3975.tar.gz
Merge branch 'wip-5784' into next
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rwxr-xr-xqa/workunits/rados/test_hang.sh8
-rw-r--r--src/osdc/Objecter.cc5
-rw-r--r--src/test/system/systest_runnable.cc4
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;
}