From 877f671a2421ecd937573b44eadfd16532856135 Mon Sep 17 00:00:00 2001 From: sage Date: Wed, 9 Aug 2006 05:25:20 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@793 29311d96-e01e-0410-9327-a35deaab8ce9 --- ceph/common/Thread.h | 4 ++++ ceph/msg/NewMessenger.cc | 14 +++++++++----- ceph/osdc/Objecter.h | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ceph/common/Thread.h b/ceph/common/Thread.h index 8fe29df33fe4d..845b761e61925 100644 --- a/ceph/common/Thread.h +++ b/ceph/common/Thread.h @@ -40,6 +40,10 @@ class Thread { return pthread_create( &thread_id, NULL, _entry_func, (void*)this ); } + bool am_self() { + return (pthread_self() == thread_id); + } + int join(void **prval = 0) { if (thread_id == 0) return -1; // never started. int status = pthread_join(thread_id, prval); diff --git a/ceph/msg/NewMessenger.cc b/ceph/msg/NewMessenger.cc index 740a92b33e328..96149174f22bd 100644 --- a/ceph/msg/NewMessenger.cc +++ b/ceph/msg/NewMessenger.cc @@ -1428,11 +1428,15 @@ int Rank::EntityMessenger::shutdown() rank.unregister_entity(this); // stop my dispatch thread - lock.Lock(); - stop = true; - cond.Signal(); - lock.Unlock(); - dispatch_thread.join(); + if (dispatch_thread.am_self()) + stop = true; + else { + lock.Lock(); + stop = true; + cond.Signal(); + lock.Unlock(); + dispatch_thread.join(); + } return 0; } diff --git a/ceph/osdc/Objecter.h b/ceph/osdc/Objecter.h index 6365ba8f49924..309b0911690d6 100644 --- a/ceph/osdc/Objecter.h +++ b/ceph/osdc/Objecter.h @@ -31,6 +31,7 @@ class Objecter { class OSDOp { public: list extents; + virtual ~OSDOp() {} }; class OSDRead : public OSDOp { -- 2.39.5