我尝试使用kv_t来存储一些数据,但没有成功。我也试着去了例子论坛。kv.c。当kv.c崩溃时,试图创建第二个论坛线程时,Forum .c挂起。
当我有一个项目添加到kv, kv_do将成功。在添加第二项之后,尝试调用kv_do将导致无限循环,并且数据似乎也无效。
#include "stdio.h"
int list_threads(kv_item *item, xbuf_t *reply)
{
Thread *thread = (Thread*)item->val;
xbuf_t thread_li;
xbuf_init(&thread_li);
//using sprintf-like formatting
xbuf_xcat(&thread_li,
"<li>"
"<a href='/?forum_simple/act=t/id=%llu'>%s</a> (%lu)"
"</li>",
thread->id, thread->title.ptr, thread->posts.nbr_items
);
char *pos = (char*)xbuf_findstr(reply, "<!--tpl-->");
if (pos) xbuf_insert(reply, pos, thread_li.len, thread_li.ptr);
printf("-----------listing threads------n");
xbuf_free(&thread_li);
return 1;
}
以上代码来自forum.c。尝试创建第一个论坛线程后,尝试创建第二个将挂起,因为list_threads函数被无限调用。---------清单线程-----------在终端上无限地打印
另一个用户最近报告了kv_do的崩溃(参见"最新的" G-WAN问题),这似乎与原子原语的实现有关,而不是与kv代码有关。
一旦问题被隔离,将发布一个解决方案。