void Client::init()
{
+ Mutex::Locker lock(client_lock);
objecter->init();
}
-void Client::shutdown() {
+void Client::shutdown()
+{
+ Mutex::Locker lock(client_lock);
dout(1) << "shutdown" << dendl;
objecter->shutdown();
messenger->shutdown();
// messages ------------------------------
+void Objecter::init()
+{
+ assert(client_lock.is_locked()); // otherwise event cancellation is unsafe
+ timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this));
+}
+
+void Objecter::shutdown()
+{
+ assert(client_lock.is_locked()); // otherwise event cancellation is unsafe
+ timer.cancel_all();
+}
+
+
void Objecter::dispatch(Message *m)
{
switch (m->get_type()) {
break;
}
}
+
+ // reschedule
+ timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this));
}
Mutex &client_lock;
SafeTimer timer;
- Context *tick_event;
class C_Tick : public Context {
Objecter *ob;
messenger(m), monmap(mm), osdmap(om),
last_tid(0), client_inc(-1),
num_unacked(0), num_uncommitted(0),
- client_lock(l), timer(l), tick_event(0)
+ client_lock(l), timer(l)
{ }
~Objecter() { }
- void init() {
- assert(client_lock.is_locked()); // otherwise event cancellation is unsafe
- timer.add_event_after(g_conf.objecter_tick_interval, new C_Tick(this));
- }
- void shutdown() {
- assert(client_lock.is_locked()); // otherwise event cancellation is unsafe
- if (tick_event) timer.cancel_event(tick_event);
- }
+ void init();
+ void shutdown();
// messages
public: