socsvn commit: r238504 - in soc2012/gmiller/locking-head: .
lib/libwitness
gmiller at FreeBSD.org
gmiller at FreeBSD.org
Thu Jun 28 20:01:50 UTC 2012
Author: gmiller
Date: Thu Jun 28 20:01:47 2012
New Revision: 238504
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238504
Log:
r238485 at FreeBSD-dev: root | 2012-06-20 04:25:19 -0500
Implement graph node lookup and graph traversal.
Modified:
soc2012/gmiller/locking-head/ (props changed)
soc2012/gmiller/locking-head/lib/libwitness/graph.c
soc2012/gmiller/locking-head/lib/libwitness/witness.h
Modified: soc2012/gmiller/locking-head/lib/libwitness/graph.c
==============================================================================
--- soc2012/gmiller/locking-head/lib/libwitness/graph.c Thu Jun 28 20:01:36 2012 (r238503)
+++ soc2012/gmiller/locking-head/lib/libwitness/graph.c Thu Jun 28 20:01:47 2012 (r238504)
@@ -29,9 +29,56 @@
struct graph_node *root = NULL;
+static struct graph_node *
+scan_graph(struct graph_node *graph, void *lock)
+{
+ struct graph_node *ret;
+ struct graph_node *child;
+
+ if (graph->lock == lock) {
+ return (graph);
+ }
+
+ child = graph->child;
+ while (child != NULL) {
+ ret = scan_graph(child, lock);
+ if (ret != NULL) {
+ return (ret);
+ }
+
+ child = child->sibling;
+ }
+
+ return (NULL);
+}
+
+static struct graph_node *
+get_node(void *lock)
+{
+ if (root != NULL) {
+ return (scan_graph(root, lock));
+ }
+
+ return (NULL);
+}
+
int
insert_edge(struct graph_node *from, struct graph_node *to)
{
- from = from; to = to;
- return 0;
+#if 1
+ // suppress warning
+ get_node(from->lock);
+#endif
+ if (from == to) {
+ return (0);
+ }
+
+ if (scan_graph(to, from->lock) != NULL) {
+ return (-1);
+ }
+
+ /* XXX */
+
+ return (0);
}
+
Modified: soc2012/gmiller/locking-head/lib/libwitness/witness.h
==============================================================================
--- soc2012/gmiller/locking-head/lib/libwitness/witness.h Thu Jun 28 20:01:36 2012 (r238503)
+++ soc2012/gmiller/locking-head/lib/libwitness/witness.h Thu Jun 28 20:01:47 2012 (r238504)
@@ -37,6 +37,9 @@
};
struct graph_node {
+ void *lock;
+ struct graph_node *child;
+ struct graph_node *sibling;
};
extern pthread_mutex_t witness_mtx;
More information about the svn-soc-all
mailing list