| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/knowledge/knowledge_get_random_sequence.c')
| -rw-r--r-- | src/knowledge/knowledge_get_random_sequence.c | 19 |
1 files changed, 15 insertions, 4 deletions
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; } |


