armink / FlashDB

An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库
Apache License 2.0
1.83k stars 421 forks source link

多线程下fdb_kv_get 返回值可能存在异常 #177

Open dingdong1123 opened 2 years ago

dingdong1123 commented 2 years ago

char fdb_kv_get(fdb_kvdb_t db, const char key) { static char value[FDB_STR_KV_VALUE_MAX_SIZE + 1]; size_t get_size; struct fdb_blob blob;

if ((get_size = fdb_kv_get_blob(db, key, fdb_blob_make(&blob, value, FDB_STR_KV_VALUE_MAX_SIZE))) > 0) {
    /* the return value must be string */
    if (fdb_is_str((uint8_t *)value, get_size)) {
        value[get_size] = '\0';
        return value;
    } else if (blob.saved.len > FDB_STR_KV_VALUE_MAX_SIZE) {
        FDB_INFO("Warning: The default string KV value buffer length (%" PRIdLEAST16 ") is too less (%" PRIu32 ").\n", FDB_STR_KV_VALUE_MAX_SIZE,
                (uint32_t)blob.saved.len);
    } else {
        FDB_INFO("Warning: The KV value isn't string. Could not be returned\n");
        return NULL;
    }
}

return NULL;

} 以上函数,返回的Value 可能不安全的,多线程下,value可能不是想要的值

armink commented 2 years ago

image

文档里已经说明了哈