@@ -106,6 +106,17 @@ class Messenger {
106106
107107 ZTracer::Endpoint trace_endpoint;
108108
109+ static void insert_head (std::vector<PriorityDispatcher>& v,
110+ PriorityDispatcher d)
111+ {
112+ v.insert (std::lower_bound (v.begin (), v.end (), d), d);
113+ }
114+ static void insert_tail (std::vector<PriorityDispatcher>& v,
115+ PriorityDispatcher d)
116+ {
117+ v.insert (std::upper_bound (v.begin (), v.end (), d), d);
118+ }
119+
109120protected:
110121 void set_endpoint_addr (const entity_addr_t & a,
111122 const entity_name_t &name);
@@ -401,11 +412,10 @@ class Messenger {
401412 */
402413 void add_dispatcher_head (Dispatcher *d, PriorityDispatcher::priority_t priority=Dispatcher::PRIORITY_DEFAULT) {
403414 bool first = dispatchers.empty ();
404- dispatchers. insert (dispatchers. begin (), PriorityDispatcher{priority, d}) ;
405- std::stable_sort (dispatchers. begin (), dispatchers. end () );
415+ const PriorityDispatcher entry {priority, d};
416+ insert_head (dispatchers, entry );
406417 if (d->ms_can_fast_dispatch_any ()) {
407- fast_dispatchers.insert (fast_dispatchers.begin (), PriorityDispatcher{priority, d});
408- std::stable_sort (fast_dispatchers.begin (), fast_dispatchers.end ());
418+ insert_head (fast_dispatchers, entry);
409419 }
410420 if (first)
411421 ready ();
@@ -419,11 +429,10 @@ class Messenger {
419429 */
420430 void add_dispatcher_tail (Dispatcher *d, PriorityDispatcher::priority_t priority=Dispatcher::PRIORITY_DEFAULT) {
421431 bool first = dispatchers.empty ();
422- dispatchers. push_back ( PriorityDispatcher{priority, d}) ;
423- std::stable_sort (dispatchers. begin (), dispatchers. end () );
432+ const PriorityDispatcher entry {priority, d};
433+ insert_tail (dispatchers, entry );
424434 if (d->ms_can_fast_dispatch_any ()) {
425- fast_dispatchers.push_back (PriorityDispatcher{priority, d});
426- std::stable_sort (fast_dispatchers.begin (), fast_dispatchers.end ());
435+ insert_tail (fast_dispatchers, entry);
427436 }
428437 if (first)
429438 ready ();
0 commit comments