My Project
|
Public Member Functions | |
Deadlock_detection_visitor (MDL_context *start_node_arg) | |
virtual bool | enter_node (MDL_context *node) |
virtual void | leave_node (MDL_context *node) |
virtual bool | inspect_edge (MDL_context *dest) |
MDL_context * | get_victim () const |
A context of the recursive traversal through all contexts in all sessions in search for deadlock.
bool Deadlock_detection_visitor::enter_node | ( | MDL_context * | node | ) | [virtual] |
Enter a node of a wait-for graph. After a node is entered, inspect_edge() will be called for all wait-for destinations of this node. Then leave_node() will be called. We call "enter_node()" for all nodes we inspect, including the starting node.
TRUE | Maximum search depth exceeded. |
FALSE | OK. |
Implements MDL_wait_for_graph_visitor.
bool Deadlock_detection_visitor::inspect_edge | ( | MDL_context * | node | ) | [virtual] |
Inspect a wait-for graph edge from one MDL context to another.
TRUE | A loop is found. |
FALSE | No loop is found. |
Implements MDL_wait_for_graph_visitor.
void Deadlock_detection_visitor::leave_node | ( | MDL_context * | node | ) | [virtual] |
Done inspecting this node. Decrease the search depth. If a deadlock is found, and we are backtracking to the start node, optionally change the deadlock victim to one with lower deadlock weight.
Implements MDL_wait_for_graph_visitor.