Storage Engine API
lock_request_list.h
Go to the documentation of this file.
1 
29 #pragma once
30 
32 #include "mongo/util/assert_util.h"
33 
34 namespace mongo {
35 
47 public:
48  void push_front(LockRequest* request) {
49  // Sanity check that we do not reuse entries without cleaning them up
50  invariant(request->next == NULL);
51  invariant(request->prev == NULL);
52 
53  if (_front == NULL) {
54  _front = _back = request;
55  } else {
56  request->next = _front;
57 
58  _front->prev = request;
59  _front = request;
60  }
61  }
62 
63  void push_back(LockRequest* request) {
64  // Sanity check that we do not reuse entries without cleaning them up
65  invariant(request->next == NULL);
66  invariant(request->prev == NULL);
67 
68  if (_front == NULL) {
69  _front = _back = request;
70  } else {
71  request->prev = _back;
72 
73  _back->next = request;
74  _back = request;
75  }
76  }
77 
78  void remove(LockRequest* request) {
79  if (request->prev != NULL) {
80  request->prev->next = request->next;
81  } else {
82  _front = request->next;
83  }
84 
85  if (request->next != NULL) {
86  request->next->prev = request->prev;
87  } else {
88  _back = request->prev;
89  }
90 
91  request->prev = NULL;
92  request->next = NULL;
93  }
94 
95  void reset() {
96  _front = _back = NULL;
97  }
98 
99  bool empty() const {
100  return _front == NULL;
101  }
102 
103  // Pointers to the beginning and the end of the list
106 };
107 
108 } // namespace mongo
void push_back(LockRequest *request)
Definition: lock_request_list.h:63
bool empty() const
Definition: lock_request_list.h:99
Copyright (C) 2014 MongoDB Inc.
Definition: bson_collection_catalog_entry.cpp:38
void reset()
Definition: lock_request_list.h:95
Simple intrusive list implementation for the lock's granted and conflicting lists.
Definition: lock_request_list.h:46
LockRequest * prev
Definition: lock_manager_defs.h:405
void push_front(LockRequest *request)
Definition: lock_request_list.h:48
LockRequest * next
Definition: lock_manager_defs.h:406
LockRequest * _back
Definition: lock_request_list.h:105
There is one of those entries per each request for a lock.
Definition: lock_manager_defs.h:307
LockRequest * _front
Definition: lock_request_list.h:104