kv_do()未按预期工作

  • 本文关键字:工作 do kv g-wan
  • 更新时间 :
  • 英文 :


这在我的init.c:中

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);

这些初始化仅用于测试幼崽:

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过程:

static int test_proc(const kv_item *item, const void *ctx)
{
    return 1;
}

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

我发现了一个边缘情况,如果我的密钥是"测试通道",密钥长度是strlen("测试通道(,然后下一个通道密钥是"Test Channel2",其中密钥长度与第一个项目的密钥长度一样长,那么它可以处理两个项目。相当令人困惑。

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

我知道gwan有时会遇到KVM问题,所以如果可能的话,我会在Ubuntu上运行Oracle VM VirtualBox v5.0.24。

kv.cpersistence.c G-WAN示例适用于您吗?

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

相关内容

  • 没有找到相关文章

最新更新