forked from vieter-v/libvieter
Compare commits
9 Commits
0e63714de3
...
1c563d8421
Author | SHA1 | Date |
---|---|---|
Jef Roosens | 1c563d8421 | |
Jef Roosens | 83b3198a49 | |
Jef Roosens | 02bd2c24b7 | |
Jef Roosens | 8668148e96 | |
Jef Roosens | 53eb5c1784 | |
Jef Roosens | f376aedaee | |
Jef Roosens | 38e84afd1d | |
Jef Roosens | d9402ced54 | |
Jef Roosens | a6ed89d8cd |
6
Makefile
6
Makefile
|
@ -67,15 +67,9 @@ $(TARGETS_TEST): test-%: %
|
||||||
$(TARGETS_MEM_TEST): test-mem-%: %
|
$(TARGETS_MEM_TEST): test-mem-%: %
|
||||||
valgrind --tool=memcheck --error-exitcode=1 --track-origins=yes --leak-check=full ./$^
|
valgrind --tool=memcheck --error-exitcode=1 --track-origins=yes --leak-check=full ./$^
|
||||||
|
|
||||||
test-mem: build-test
|
|
||||||
@ $(foreach bin,$(BINS_TEST),valgrind --tool=memcheck --error-exitcode=1 \
|
|
||||||
--track-origins=yes --leak-check=full ./$(bin);)
|
|
||||||
|
|
||||||
.PHONY: build-test
|
.PHONY: build-test
|
||||||
build-test: $(BINS_TEST)
|
build-test: $(BINS_TEST)
|
||||||
|
|
||||||
# For simplicity, we link every object file to each of the test files. This
|
|
||||||
# might be changed later if this starts to become too slow.
|
|
||||||
$(BINS_TEST): %: %.c.o $(LIB)
|
$(BINS_TEST): %: %.c.o $(LIB)
|
||||||
$(CC) \
|
$(CC) \
|
||||||
$^ -o $@
|
$^ -o $@
|
||||||
|
|
|
@ -67,4 +67,22 @@ void vieter_tree_iterator_free(vieter_tree_iterator **ptp);
|
||||||
vieter_tree_error vieter_tree_iterator_next(void **out,
|
vieter_tree_error vieter_tree_iterator_next(void **out,
|
||||||
vieter_tree_iterator *iter);
|
vieter_tree_iterator *iter);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Acquire a read lock on the tree. Return value is the result of
|
||||||
|
* pthread_rwlock_rdlock.
|
||||||
|
*/
|
||||||
|
int vieter_tree_rlock(vieter_tree *tree);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Acquire a write lock on the tree. Return value is the result of
|
||||||
|
* pthread_rwlock_wrlock.
|
||||||
|
*/
|
||||||
|
int vieter_tree_wlock(vieter_tree *tree);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unlock the lock after having acquired it. Return value is the result of
|
||||||
|
* pthread_rwlock_unlock.
|
||||||
|
*/
|
||||||
|
int vieter_tree_unlock(vieter_tree *tree);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -114,3 +114,15 @@ bool vieter_tree_validate(vieter_tree *tree) {
|
||||||
return vieter_tree_node_get(tree->root, vieter_tree_node_black) &&
|
return vieter_tree_node_get(tree->root, vieter_tree_node_black) &&
|
||||||
vieter_tree_node_validate(tree->root, 0, expected_black_nodes);
|
vieter_tree_node_validate(tree->root, 0, expected_black_nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vieter_tree_rlock(vieter_tree *tree) {
|
||||||
|
return pthread_rwlock_rdlock(&tree->lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
int vieter_tree_wlock(vieter_tree *tree) {
|
||||||
|
return pthread_rwlock_wrlock(&tree->lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
int vieter_tree_unlock(vieter_tree *tree) {
|
||||||
|
return pthread_rwlock_unlock(&tree->lock);
|
||||||
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
#include "vieter_tree.h"
|
#include "vieter_tree.h"
|
||||||
#include "vieter_tree_node.h"
|
#include "vieter_tree_node.h"
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct vieter_tree {
|
struct vieter_tree {
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
vieter_tree_node *root;
|
vieter_tree_node *root;
|
||||||
|
pthread_rwlock_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue