unbound  0.1
Data Structures | Macros | Functions | Variables
lock_verify.c File Reference

This file checks the lock traces generated by checklock.c. More...

#include "config.h"
#include "util/log.h"
#include "util/rbtree.h"
#include "util/locks.h"
#include "util/fptr_wlist.h"

Data Structures

struct  order_id
 keep track of lock id in lock-verify application More...
struct  order_lock
 a lock More...
struct  lock_ref
 reference to a lock in a rbtree set More...

Macros

#define STRMAX   1024
 max length of strings: filenames and function names.

Functions

static void usage ()
 print program usage help
static int read_header (FILE *in)
 read header entry.
static int readup_str (char **str, FILE *in)
 read a string from file, false on error
static void read_create (rbtree_t *all, FILE *in)
 read creation entry
static struct order_lockinsert_lock (rbtree_t *all, struct order_id *id)
 insert lock entry (empty) into list
static void read_lock (rbtree_t *all, FILE *in, int val)
 read lock entry
static void readinput (rbtree_t *all, char *file)
 read input file
static void found_cycle (struct lock_ref *visit, int level)
 print cycle message
static int detect_cycle (struct lock_ref *visit, struct lock_ref *from)
 Detect cycle by comparing visited now with all (unvisited) bigger nodes.
static void search_cycle (struct lock_ref *visit, int level, struct lock_ref *from)
 recursive function to depth first search for cycles.
static void check_order_lock (struct order_lock *lock)
 Check ordering of one lock.
static void check_order (rbtree_t *all_locks)
 Check ordering of locks.
int main (int argc, char *argv[])
 main program to verify all traces passed

Variables

static int errors_detected = 0
 count of errors detected
static int verb = 0
 verbose?

Detailed Description

This file checks the lock traces generated by checklock.c.

Checks if locks are consistently locked in the same order. If not, this can lead to deadlock if threads execute the different ordering at the same time.

Macro Definition Documentation

#define STRMAX   1024

max length of strings: filenames and function names.

Referenced by readup_str().

Function Documentation

static int read_header ( FILE *  in)
static

read header entry.

Parameters
in,:file to read header of.
Returns
: False if it does not belong to the rest.

References fatal_exit().

Referenced by readinput().

static void search_cycle ( struct lock_ref visit,
int  level,
struct lock_ref from 
)
static

recursive function to depth first search for cycles.

Parameters
visit,:the lock visited at this step. its dfs_next pointer gives the visited lock up in recursion. same as lookfor at level 0.
level,:depth of recursion. 0 is start.
from,:search for matches from unvisited node upwards.

References order_lock::create_file, order_lock::create_line, detect_cycle(), order_lock::dfs_next, fatal_exit(), found_cycle(), order_lock::id, order_id::instance, lock_ref::lock, RBTREE_FOR, order_lock::smaller, order_id::thr, verb, and order_lock::visited.

Referenced by check_order_lock().