Skip to content

Commit

Permalink
use custom allocate/free function everywhere
Browse files Browse the repository at this point in the history
  • Loading branch information
WojciechMula committed Sep 8, 2016
1 parent 43cbfba commit 529260c
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 33 deletions.
4 changes: 2 additions & 2 deletions Automaton.c
Expand Up @@ -336,7 +336,7 @@ clear_aux(TrieNode* node, KeysStore store) {
clear_aux(child, store);
}

memfree(node);
memory_free(node);
}
#undef automaton
}
Expand Down Expand Up @@ -562,7 +562,7 @@ automaton_make_automaton(PyObject* self, PyObject* args) {
break;
else {
node = item->node;
memfree(item);
memory_free(item);
}

for (i=0; i < node->n; i++) {
Expand Down
13 changes: 5 additions & 8 deletions AutomatonItemsIter.c
Expand Up @@ -52,20 +52,20 @@ automaton_items_iter_new(
iter->matchtype = matchtype;
list_init(&iter->stack);

iter->buffer = memalloc((automaton->longest_word + 1) * TRIE_LETTER_SIZE);
iter->buffer = memory_alloc((automaton->longest_word + 1) * TRIE_LETTER_SIZE);
if (iter->buffer == NULL) {
goto no_memory;
}

#ifndef AHOCORASICK_UNICODE
iter->char_buffer = memalloc(automaton->longest_word + 1);
iter->char_buffer = memory_alloc(automaton->longest_word + 1);
if (iter->char_buffer == NULL) {
goto no_memory;
}
#endif

if (word) {
iter->pattern = (TRIE_LETTER_TYPE*)memalloc(wordlen * TRIE_LETTER_SIZE);
iter->pattern = (TRIE_LETTER_TYPE*)memory_alloc(wordlen * TRIE_LETTER_SIZE);
if (UNLIKELY(iter->pattern == NULL)) {
goto no_memory;
}
Expand Down Expand Up @@ -105,11 +105,8 @@ automaton_items_iter_new(

static void
automaton_items_iter_del(PyObject* self) {
if (iter->buffer)
memfree(iter->buffer);

if (iter->pattern)
memfree(iter->pattern);
xfree(iter->buffer);
xfree(iter->pattern);

list_delete(&iter->stack);
Py_DECREF(iter->automaton);
Expand Down
30 changes: 14 additions & 16 deletions Automaton_pickle.c
Expand Up @@ -52,7 +52,7 @@ pickle_dump_replace_fail_with_id(TrieNode* node, const int depth, void* extra) {

ASSERT(sizeof(NodeID*) <= sizeof(TrieNode*));
#define state ((DumpState*)extra)
repl = (NodeID*)memalloc(sizeof(NodeID));
repl = (NodeID*)memory_alloc(sizeof(NodeID));
if (LIKELY(repl != NULL)) {
state->id += 1;
state->total_size += trienode_get_size(node)/* - sizeof(TrieNode*)*/;
Expand All @@ -79,7 +79,7 @@ pickle_dump_revert_replace(TrieNode* node, const int depth, void* extra) {
if (state->failed_on != node) {
NodeID* repl = (NodeID*)(node->fail);
node->fail = repl->fail;
memfree(repl);
memory_free(repl);

return 1;
}
Expand All @@ -95,7 +95,7 @@ pickle_dump_undo_replace(TrieNode* node, const int depth, void* extra) {
#define state ((DumpState*)extra)
NodeID* repl = (NodeID*)(node->fail);
node->fail = repl->fail;
memfree(repl);
memory_free(repl);

return 1;
#undef state
Expand Down Expand Up @@ -202,7 +202,7 @@ automaton___reduce__(PyObject* self, PyObject* args) {
data.error = false;
data.size = state.total_size;
data.top = 0;
data.data = memalloc(data.size);
data.data = memory_alloc(data.size);
data.values = NULL;

if (data.data == NULL) {
Expand Down Expand Up @@ -261,8 +261,7 @@ automaton___reduce__(PyObject* self, PyObject* args) {
trie_traverse(automaton->root, pickle_dump_undo_replace, NULL);

// and free memory
if (data.data)
memfree(data.data);
xfree(data.data);

Py_XDECREF(data.values);

Expand All @@ -276,8 +275,7 @@ automaton___reduce__(PyObject* self, PyObject* args) {
trie_traverse(automaton->root, pickle_dump_undo_replace, NULL);

// and free memory
if (data.data)
memfree(data.data);
xfree(data.data);

Py_XDECREF(data.values);
return NULL;
Expand Down Expand Up @@ -309,7 +307,7 @@ automaton_unpickle(
return false;
}

id2node = (TrieNode**)memalloc((count+1) * sizeof(TrieNode));
id2node = (TrieNode**)memory_alloc((count+1) * sizeof(TrieNode));
if (id2node == NULL) {
goto no_mem;
}
Expand All @@ -319,7 +317,7 @@ automaton_unpickle(
ptr = data;
for (i=0; i < count; i++) {
dump = (TrieNode*)(ptr);
node = (TrieNode*)memalloc(sizeof(TrieNode));
node = (TrieNode*)memory_alloc(sizeof(TrieNode));
if (LIKELY(node != NULL)) {
node->output = dump->output;
node->fail = dump->fail;
Expand All @@ -332,7 +330,7 @@ automaton_unpickle(
goto no_mem;

if (node->n > 0) {
node->next = (TrieNode**)memalloc(node->n * sizeof(TrieNode*));
node->next = (TrieNode**)memory_alloc(node->n * sizeof(TrieNode*));
if (LIKELY(node->next != NULL)) {
if (UNLIKELY(ptr + sizeof(TrieNode) - sizeof(TrieNode*) > data + size)) {
PyErr_SetString(PyExc_ValueError, "binary data truncated (2)");
Expand All @@ -344,7 +342,7 @@ automaton_unpickle(
node->next[j] = next[j];
}
else {
memfree(node);
memory_free(node);
goto no_mem;
}
}
Expand Down Expand Up @@ -385,7 +383,7 @@ automaton_unpickle(

automaton->root = id2node[1];

memfree(id2node);
memory_free(id2node);
return 1;

no_mem:
Expand All @@ -395,12 +393,12 @@ automaton_unpickle(
for (i=1; i < id; i++) {
TrieNode* tmp = id2node[i];
if (tmp->n > 0)
memfree(tmp->next);
memory_free(tmp->next);

memfree(tmp);
memory_free(tmp);
}

memfree(id2node);
memory_free(id2node);
};

return 0;
Expand Down
3 changes: 3 additions & 0 deletions setup.py
Expand Up @@ -43,6 +43,9 @@ def get_long_description():
sources=[
'pyahocorasick.c'
],
libraries=[
"efence"
],
define_macros=macros,
depends=[
'common.h',
Expand Down
11 changes: 7 additions & 4 deletions slist.c
Expand Up @@ -17,15 +17,18 @@

ListItem*
list_item_new(const size_t size) {
ListItem* item = (ListItem*)memalloc(size);
item->__next = 0;
ListItem* item = (ListItem*)memory_alloc(size);
if (item) {
item->__next = 0;
}

return item;
}


void
list_item_delete(ListItem* item) {
memfree(item);
memory_free(item);
}


Expand All @@ -50,7 +53,7 @@ list_delete(List* list) {
while (item) {
tmp = item;
item = item->__next;
memfree(tmp);
memory_free(tmp);
}

list->head = list->last = NULL;
Expand Down
2 changes: 1 addition & 1 deletion trienode.c
Expand Up @@ -12,7 +12,7 @@

static TrieNode*
trienode_new(const TRIE_LETTER_TYPE letter, const char eow) {
TrieNode* node = (TrieNode*)memalloc(sizeof(TrieNode));
TrieNode* node = (TrieNode*)memory_alloc(sizeof(TrieNode));
if (node) {
node->output.integer = 0;
node->output.object = NULL;
Expand Down
4 changes: 2 additions & 2 deletions utils.c
Expand Up @@ -13,12 +13,12 @@
void* memory_alloc(ssize_t size) {
void* res = malloc(size);

//printf("allocated %p (size=%d)\n", res, size);
printf("allocated %p (size=%d)\n", res, size);
return res;
}

void memory_free(void* ptr) {
//printf("freeing %p\n", ptr);
printf("freeing %p\n", ptr);
free(ptr);
}

Expand Down

0 comments on commit 529260c

Please sign in to comment.