summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp b/TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp
index 62730cd01e0..373c38dcc21 100644
--- a/TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp
+++ b/TAO/orbsvcs/orbsvcs/Notify/Routing_Slip.cpp
@@ -262,7 +262,7 @@ Routing_Slip::route (TAO_Notify_ProxyConsumer* pc, bool reliable_channel)
{
enter_state_new (guard);
}
- else if (this->event_->reliable().value() == CosNotification::Persistent)
+ else if (this->event_->reliable().value() == true)
{
enter_state_new (guard);
}
@@ -271,7 +271,13 @@ Routing_Slip::route (TAO_Notify_ProxyConsumer* pc, bool reliable_channel)
enter_state_transient (guard);
}
}
- guard.release ();
+ else
+ {
+ // We only need to release the guard if the state is rssCREATING.
+ // By calling enter_state_*, we are guaranteed that the guard has
+ // been released.
+ guard.release ();
+ }
pc->execute_task (method);
}
#if 0 // forward
@@ -285,6 +291,7 @@ Routing_Slip::forward (TAO_Notify_ProxySupplier* ps, bool filter)
Routing_Slip_Guard guard (this->internals_);
enter_state_transient (guard);
+ guard.acquire();
size_t request_id = delivery_requests_.size ();
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
@@ -464,6 +471,7 @@ Routing_Slip::at_front_of_persist_queue ()
ACE_TEXT ("(%P|%t) Routing Slip #%d: COMPLETE_WHILE_NEW Reached front of queue\n"),
this->sequence_
));
+ guard.release ();
this->persistent_queue_.complete ();
enter_state_terminal (guard);
break;
@@ -554,6 +562,7 @@ Routing_Slip::persist_complete ()
ACE_TEXT ("(%P|%t) Notification Service Routing Slip: Unexpected transition in state %d\n"),
static_cast<int> (this->state_)
));
+ guard.release ();
break;
}
}
@@ -574,7 +583,6 @@ Routing_Slip::add_to_persist_queue(Routing_Slip_Guard & guard)
{
guard.release ();
this->persistent_queue_.add (this->this_ptr_);
- guard.acquire (); // necessary?
}
////////////////////
@@ -600,6 +608,7 @@ Routing_Slip::continue_state_new (Routing_Slip_Guard & guard)
{
this->enter_state_complete_while_new (guard);
}
+ guard.release ();
}
void
Routing_Slip::enter_state_complete_while_new (Routing_Slip_Guard & guard)
@@ -623,19 +632,18 @@ void
Routing_Slip::enter_state_reloaded (Routing_Slip_Guard & guard)
{
++count_enter_reloaded_;
- ACE_UNUSED_ARG (guard);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #&d: enter state RELOADED\n"),
this->sequence_
));
this->state_ = rssRELOADED;
+ guard.release();
}
void
Routing_Slip::enter_state_transient (Routing_Slip_Guard & guard)
{
++count_enter_transient_;
- ACE_UNUSED_ARG (guard);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #%d: enter state TRANSIENT\n"),
this->sequence_
@@ -650,6 +658,10 @@ Routing_Slip::enter_state_transient (Routing_Slip_Guard & guard)
{
enter_state_terminal (guard);
}
+ else
+ {
+ guard.release ();
+ }
}
void
@@ -660,6 +672,10 @@ Routing_Slip::continue_state_transient (Routing_Slip_Guard & guard)
{
enter_state_terminal (guard);
}
+ else
+ {
+ guard.release ();
+ }
}
void
Routing_Slip::enter_state_saving (Routing_Slip_Guard & guard)
@@ -669,6 +685,7 @@ Routing_Slip::enter_state_saving (Routing_Slip_Guard & guard)
{
// Note This should actually be a throw (out of memory)
// but we cheat and make this a transient event.
+ guard.release ();
this->persistent_queue_.complete ();
enter_state_transient (guard);
}
@@ -690,8 +707,6 @@ Routing_Slip::enter_state_saving (Routing_Slip_Guard & guard)
guard.release ();
this->rspm_->store (*event_mb, *rs_mb);
-
- guard.acquire (); // necessary?
}
}
@@ -699,12 +714,12 @@ void
Routing_Slip::enter_state_saved (Routing_Slip_Guard & guard)
{
++count_enter_saved_;
- ACE_UNUSED_ARG (guard);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #%d: enter state SAVED\n"),
this->sequence_
));
this->state_ = rssSAVED;
+ guard.release ();
}
void
@@ -724,7 +739,6 @@ Routing_Slip::enter_state_updating (Routing_Slip_Guard & guard)
ACE_ASSERT (this->rspm_ != 0);
this->rspm_->update (*rs_mb);
- guard.acquire (); // necessary?
}
@@ -732,19 +746,19 @@ void
Routing_Slip::enter_state_changed_while_saving (Routing_Slip_Guard & guard)
{
++count_enter_changed_while_saving_;
- ACE_UNUSED_ARG (guard);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #%d: enter state CHANGED_WHILE_SAVING\n"),
this->sequence_
));
this->state_ = rssCHANGED_WHILE_SAVING;
+ guard.release ();
}
void
Routing_Slip::continue_state_changed_while_saving (Routing_Slip_Guard & guard)
{
- ACE_UNUSED_ARG (guard);
// no action necessary
+ guard.release ();
}
void
@@ -773,18 +787,22 @@ Routing_Slip::continue_state_changed (Routing_Slip_Guard & guard)
{
enter_state_complete (guard);
}
+ else
+ {
+ guard.release ();
+ }
}
void
Routing_Slip::enter_state_complete (Routing_Slip_Guard & guard)
{
++count_enter_complete_;
- ACE_UNUSED_ARG (guard);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #%d: enter state COMPLETE\n"),
this->sequence_
));
this->state_ = rssCOMPLETE;
+ guard.release ();
}
void
@@ -798,14 +816,12 @@ Routing_Slip::enter_state_deleting (Routing_Slip_Guard & guard)
this->state_ = rssDELETING;
guard.release ();
this->rspm_->remove ();
- guard.acquire (); // necessary?
}
void
Routing_Slip::enter_state_terminal (Routing_Slip_Guard & guard)
{
++count_enter_terminal_;
- ACE_UNUSED_ARG (guard);
ACE_ASSERT( this->is_safe_);
if (DEBUG_LEVEL > 8) ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Routing Slip #%d: enter state TERMINAL\n"),
@@ -813,6 +829,7 @@ Routing_Slip::enter_state_terminal (Routing_Slip_Guard & guard)
));
this->state_ = rssTERMINAL;
this->this_ptr_.reset ();
+ guard.release ();
}
void
@@ -892,7 +909,7 @@ Routing_Slip::reconnect (void)
{
Routing_Slip_Guard guard (this->internals_);
enter_state_saved (guard);
- guard.release ();
+
//@@todo is there a worker_task available to do this?
size_t count = this->delivery_methods_.size ();
for (size_t nmethod = 0; nmethod < count; ++nmethod)