【问题标题】:kv_do infine loop when when kv has more than 1 item当 kv 有超过 1 个项目时,kv 执行无限循环
【发布时间】:2016-09-12 04:43:39
【问题描述】:

我尝试使用 kv_t 存储一些数据但没有成功。我还尝试了示例 forum.c 和 kv.c。尝试创建第二个论坛线程时,forum.c 挂起,而 kv.c 崩溃。

当我有 1 个项目添加到 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 函数。 ---------列出线程----------- 被无限打印在终端上

【问题讨论】:

    标签: c g-wan


    【解决方案1】:

    另一位用户最近报告(参见“最新”G-WAN 问题)kv_do 崩溃,它似乎与原子原语实现有关,而不是与 kv 代码有关。

    一旦问题被隔离,将发布解决方法。

    【讨论】:

    • 这个问题已经解决了吗@Gil?
    • 不会在不久的将来:Linux 上的程序变得比 Microsoft Windows 上的程序更难维护。目前,我们无法应对这些持续不断的不兼容问题。
    • 在这种情况下,您能否分享您的工作环境以保证 kv_do 正常工作? (内核版本,也可能是 gcc 版本?)
    • TWD 的定制 Linux 内核和精简的 Linux 用户模式环境。所有(包括 G-WAN)都使用 TWD 的 LIBC 编译。
    • 一年后,似乎破坏 kv_do 的 libc 错误仍然存​​在。一件有趣的事情是,我已经在 Windows 下成功运行 G-WAN,通过它新引入的Linux subsystem 行为与原生 Linux 完全相同,包括 kv_do 的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多