From 8d5c996aef28fae9f848e1fab419b4d2821e8862 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 29 Jun 2017 15:20:24 +0200 Subject: First shot at finer mutexes. --- src/knowledge/knowledge_get_random_sequence.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/knowledge/knowledge_get_random_sequence.c') diff --git a/src/knowledge/knowledge_get_random_sequence.c b/src/knowledge/knowledge_get_random_sequence.c index 60a075f..5a214fd 100644 --- a/src/knowledge/knowledge_get_random_sequence.c +++ b/src/knowledge/knowledge_get_random_sequence.c @@ -49,7 +49,7 @@ static int weighted_random_pick int JH_knowledge_copy_random_swt_sequence ( - const struct JH_knowledge k [const static 1], + struct JH_knowledge k [const static 1], JH_index sequence [const restrict static 1], const JH_index word_id, const JH_index markov_order, @@ -58,6 +58,8 @@ int JH_knowledge_copy_random_swt_sequence { JH_index sequence_id; + JH_knowledge_readlock_word(k, word_id, io); + if ( weighted_random_pick @@ -65,7 +67,8 @@ int JH_knowledge_copy_random_swt_sequence &(k->words[word_id].swt), k->words[word_id].occurrences, &sequence_id - ) < 0 + ) + < 0 ) { JH_S_PROG_ERROR @@ -73,11 +76,17 @@ int JH_knowledge_copy_random_swt_sequence io, "Knowledge inconsistency; there are no acceptable markov sequences " "linked to a word that has been picked as being an acceptable pillar." - ) - ; + ); + + JH_knowledge_readunlock_word(k, word_id, io); + return -1; } + JH_knowledge_readunlock_word(k, word_id, io); + + JH_knowledge_readlock_sequences(k, io); + memcpy ( (void *) sequence, @@ -85,5 +94,7 @@ int JH_knowledge_copy_random_swt_sequence (((size_t) (markov_order - 1)) * sizeof(JH_index)) ); + JH_knowledge_readunlock_sequences(k, io); + return 0; } -- cgit v1.2.3-70-g09d2