]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PrioritizedQueue: avoid double-lookup on create_queue()
authorSage Weil <sage@inktank.com>
Sat, 10 Nov 2012 11:51:25 +0000 (03:51 -0800)
committerSamuel Just <sam.just@inktank.com>
Tue, 13 Nov 2012 18:45:00 +0000 (10:45 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/common/PrioritizedQueue.h

index 7da4ebb4433bacfe4c8c8fd7a3a4d2ffc2cdc1a1..d9ac2b323161879100944f858502bb054ee4ad00 100644 (file)
@@ -150,11 +150,12 @@ class PrioritizedQueue {
   map<unsigned, SubQueue> high_queue;
   map<unsigned, SubQueue> queue;
 
-  void create_queue(unsigned priority) {
-    if (queue.count(priority))
-      return;
-    queue[priority];
+  SubQueue *create_queue(unsigned priority) {
+    typename map<unsigned, SubQueue>::iterator p = queue.find(priority);
+    if (p != queue.end())
+      return &p->second;
     total_priority += priority;
+    return &queue[priority];
   }
 
   void remove_queue(unsigned priority) {
@@ -256,13 +257,11 @@ public:
   }
 
   void enqueue(K cl, unsigned priority, unsigned cost, T item) {
-    create_queue(priority);
-    queue[priority].enqueue(cl, cost, item);
+    create_queue(priority)->enqueue(cl, cost, item);
   }
 
   void enqueue_front(K cl, unsigned priority, unsigned cost, T item) {
-    create_queue(priority);
-    queue[priority].enqueue_front(cl, cost, item);
+    create_queue(priority)->enqueue_front(cl, cost, item);
   }
 
   bool empty() {