首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kv_do()没有按预期工作

kv_do()没有按预期工作
EN

Stack Overflow用户
提问于 2016-09-05 20:04:05
回答 1查看 113关注 0票数 1

这在我的init.c

代码语言:javascript
复制
server_data_t **data = (server_data_t**)get_env(argv, US_SERVER_DATA);
data[0] = (server_data_t*)calloc(1, sizeof(server_data_t));

kv_t *channels = &data[0]->channels;
kv_t *users = &data[0]->users;

kv_init(channels, "channels.dat", 10*1024, 0, 0, 0);
kv_init(users, "users.dat", 10*1024, 0, 0, 0);

这些初始化只用于测试puproses:

代码语言:javascript
复制
channel_t *channel = (channel_t*)calloc(1, sizeof(channel_t));
channel->name = strdup("Test channel");
channel->id = 1;

kv_item channel_item;
channel_item.key = (char*)&channel->id;
channel_item.klen = sizeof(u32);
channel_item.val = (char*)channel;
channel_item.in_use = 0;

kv_add(channels, &channel_item);

channel_t *channel2 = (channel_t*)calloc(1, sizeof(channel_t));
channel2->name = strdup("Test channel2");
channel2->id = 2;

kv_item channel_item2;
channel_item2.key = (char*)&channel2->id;
channel_item2.klen = sizeof(u32);
channel_item2.val = (char*)channel2;
channel_item2.in_use = 0;

kv_add(channels, &channel_item2);

kv_do(channels, NULL, sizeof(u32), test_proc, 0);

用户定义的进程kv_do流程:

代码语言:javascript
复制
static int test_proc(const kv_item *item, const void *ctx)
{
    return 1;
}

当尝试访问所有项时,在kv_do测试过程启动无限循环之后启动服务器分段故障。它可以很好地处理列表中的一个项目,然后它只访问第一个项目并退出。我还可以使用kv_get逐一访问具有ID的项目。

我发现了一个边缘情况,如果我的键是“测试通道”键长度是strlen("Test“),然后下一个通道键是"Test Channel2”,其中密钥长度和第一个项键长度一样长,那么它可以与两个项一起工作。很让人困惑。

是代码中的错误(指针等),还是进程应该如何与返回值1一起工作?

我知道gwan有时在KVM方面有问题,所以如果可能的话,我将使用Ubuntu运行Oracle v5.0.24。

EN

回答 1

Stack Overflow用户

发布于 2016-09-06 04:14:00

kv.cpersistence.c G的例子对你有用吗?

如果其中任何一个崩溃,那么您可能正在使用不同步。G (gwan.h)具有最近的./gwan可执行文件.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39337034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档