0

我目前正在使用 sbcl 1.0.57.0 并且我的程序在 shell 上生成恒定的输出,直到某个时候我的程序在没有任何线索的情况下冻结。

抄送并向下,显示最后一次调用是:

(SB-SYS:WAIT-UNTIL-FD-USABLE 6 :INPUT NIL NIL)

我重新启动了我的程序并再次尝试了此操作,但程序再次冻结,并且 Cc down 显示此调用是最后一个调用。过了一会儿,我没有测量确切的时间,但它应该大约在 5 分钟左右,程序会继续一小段时间,然后再次冻结。

将调用置于上下文中:跟踪中第一个熟悉的调用是drakma:http-request. 但是,自身使用的完整调用不会导致冻结。

现在我想知道这个调用实际上做了什么,如果这可能是程序冻结的原因?

由于这个问题的第二部分将要求你是千里眼,如果这个电话与我的问题无关,我的最后一个问题是:这个电话有什么作用?

4

2 回答 2

1

(描述 'sb-sys:wait-until-fd-usable) 给出:

WAIT-UNTIL-FD-USABLE names a compiled function:
Lambda-list: (FD DIRECTION &OPTIONAL TIMEOUT)
[...]
Documentation:
Wait until FD is usable for DIRECTION. DIRECTION should be either :INPUT
or :OUTPUT
TIMEOUT, if supplied, is the number of seconds to wait before giving up.

调用的目的似乎是等待(没有任何超时),直到文件描述符 6 可用,但问题可能是使用 4 个参数调用该函数,而它需要 2 个或 3 个参数吗?

于 2012-10-20T19:45:40.730 回答
0

虽然从技术上讲我没有问这个,但我想添加关于这个主题的最新信息,以防其他人在类似的环境中寻找这个问题。

使用drakma:http-request. 我现在能够为特定请求编写概念证明,并将其作为问题发布在 drakma github 页面上。似乎 drakma 没有在 sbcl 中提供超时,因此(SB-SYS:WAIT-UNTIL-FD-USABLE 6 :INPUT NIL NIL)在这种情况下等待信息到达没有超时: https ://github.com/edicl/drakma/issues/67

于 2015-08-01T16:03:38.250 回答