- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试调试使用 libevent 库的代码。在该库中,有一个函数 event_new 假设创建一个 event_cb。不知何故,在我分派(dispatch)事件库后,无法调用或访问 event_cb。此问题仅发生在 hpux itanium 上。此代码适用于 hpux pa-risc、Redhat、AIX 和 Solaris。有什么需要设置的吗?
这是代码的一部分
int ttypread (int fd, Header *h, char **buf)
{
int c,k;
struct user_data user_data;
struct bufferevent *in_buffer;
struct event_config *evconfig;
log_debug("inside ttypread");
in_buffer = NULL;
user_data.fd = fd;
user_data.h = h;
user_data.buf = buf;
log_debug("from user_data, fd = %d",user_data.fd); //the log_debug is a debugging function for me to check the value sent by the system. I use it to compare between each platform
log_debug("from user_data, buf = %s",user_data.buf);
log_debug("from user_data, h.len = %d",user_data.h->len);
log_debug("from user_data, h.type = %d",user_data.h->type);
evconfig = event_config_new();
if (evconfig == NULL) {
log_error("event_config_new failed");
return -1;
}
if (event_config_require_features(evconfig, EV_FEATURE_FDS)!=0) {
log_error("event_config_require_features failed");
return -1;
}
base = event_base_new_with_config(evconfig);
if (!base) {
log_error("ttypread:event_base_new failed");
return -1;
}
const char* method; //these 3 lines are the new line edited
method = event_base_get_method(base);
log_debug("ttyread is using method = %s",method);
ev = event_new(base, fd, EV_READ|EV_PERSIST, ttypread_event_cb, &user_data);
c = event_add(ev, NULL);
log_debug("ttypread passed event_add with c value is %d",c);
in_buffer = bufferevent_socket_new(base, STDIN_FILENO, BEV_OPT_CLOSE_ON_FREE);
log_debug("ttypread passed bufferevent_socket_new");
if(in_buffer == NULL){
log_debug("problem with bufferevent_socket_new");
}
bufferevent_setcb(in_buffer, in_read_cb, NULL, in_event_cb, NULL);
bufferevent_disable(in_buffer, EV_WRITE);
bufferevent_enable(in_buffer, EV_READ);
k =event_base_dispatch(base);
log_debug("event_base have been dispatched"); //when looking at the debugging file, the other plaform will go to ttypread_event_cb function. But for hpux itanium, it stays here.
if (k == 0){
log_debug("event_base_dispatch returned 0");
} else if (k == -1){
log_debug("event_base_dispatch returned -1");
} else {
log_debug("event_base_dispatch returned 1");
}
event_base_free(base);
event_free(ev);
log_debug("finish ttypread");
log_debug("ttypread_ret will return [%d]",ttypread_ret);
return ttypread_ret;
}
void ttypread_event_cb(evutil_socket_t fd, short events, void *arg)
{
int nread;
struct timeval t;
struct user_data *user_data;
user_data = (struct user_data*)arg;
nread = 0;
log_debug("inside ttypread_event_cb");
if (events & EV_READ) {
log_debug("got events & EV_READ");
nread = ttyread(fd, user_data->h, user_data->buf);
if (nread == -1) {
ttypread_ret = -1;
event_del(ev);
event_base_loopexit(base, NULL);
} else if (nread == 0) {
if (access(input_filename, F_OK)!=0) {
log_debug("cannot access [%s]",input_filename);
tcsetattr(0, TCSANOW, &old); /* Return terminal state */
exit(EXIT_SUCCESS);
}
t.tv_sec = 0;
t.tv_usec = 250000;
select(0, 0, 0, 0, &t);
} else {
ttypread_ret = 1;
event_del(ev);
event_base_loopexit(base, NULL);
}
}
else if (events & EV_WRITE) {
log_debug("got events & EV_WRITE");
}
}
不确定这是否有帮助。但只是有关 hpux itanium 的一些信息
uname -a = HP-UX hpux-ita B.11.23 U ia64
如果您需要任何其他信息或其他功能声明,请发表评论,我将编辑问题。
编辑:我在 ttypread 中添加了一个函数。不知何故,对于 hpux itanium 来说,它返回 devpoll,而其他平台则返回 poll。我不确定这是否是问题所在。但如果是这样的话,我有什么办法可以改变它吗?
最佳答案
检查event_base_get_method的结果后,我发现只有我的hpux-itanium上使用了devpoll方法。我就是这样解决的。
char string[8] = "devpoll";
struct user_data user_data;
struct bufferevent *in_buffer;
struct event_config *evconfig;
const char *method;
const char *devpoll;
devpoll = string;
in_buffer = NULL;
user_data.fd = fd;
user_data.h = h;
user_data.buf = buf;
evconfig = event_config_new();
if (evconfig == NULL) {
log_error("event_config_new failed");
return -1;
}
if (event_config_require_features(evconfig, EV_FEATURE_FDS)!=0) {
log_error("event_config_require_features failed");
return -1;
}
if (event_config_avoid_method(evconfig,devpoll) != 0)
{
log_error("Failed to ignore devpoll method");
}
强制 libevent 忽略使用 devpoll 并使用 poll 代替。
关于c - event_new() 函数在 hpux itanium 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820297/
有人告诉我: [ABIs] guarantee the exact layout of the struct, byte offset of every member, which bits are
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我正在阅读 here关于如何选择主要碱基: "...2. If C is a dynamic class type: a. Identify all virtual base classes, dir
寻找可用于检测 HP-UX Itanium 平台上的静态/运行时内存泄漏的各种工具(免费/商业)。 背景,我们: 使用 HP-UX 11.31 ia64。但是,我们所有的应用程序仍然只有 32 位。
Itanium ABI 指出异常的内存是通过调用 __cxa_allocate_exception(size) 获得的。返回内存的对齐保证是什么? 最佳答案 Section 1.2 in chapte
我正在开发 C/C++ 跨平台代码,最后一个平台是基于 Itanium 的 HP-UX。问题末尾可以找到相关的机器和处理器信息。 我需要为下面给出的机器和编译器规范实现或找到原子比较和交换。 我已经找
我正在尝试调试使用 libevent 库的代码。在该库中,有一个函数 event_new 假设创建一个 event_cb。不知何故,在我分派(dispatch)事件库后,无法调用或访问 event_c
我需要在 HPUX(Itanium 和 PARISC)中获取用于交换信息的命令。 最佳答案 这是 unix.stackexchange 的链接那对我有帮助。谢谢@乔纳森 /usr/sbin/swapi
我正在阅读 Itanium ABI上面写着 It is intended that two type_info pointers point to equivalent type descriptio
我需要为 Itanium 编译我的代码,但似乎所有编译器(ecc、gcc、orc)都需要 Itanium 机器来执行此操作。有什么建议吗? 最佳答案 您需要将 gcc 设置为交叉编译器。这涉及到自己构
例如: template struct foo { using bar = int; }; // _Z3bazi void baz(foo::bar quux) { } template
昨天我了解到,针对 AMD64 和 Itanium 目标进行编译时,Microsoft Visual C++ 不支持内联汇编(使用 __asm 关键字)。 这是正确的吗?如果是这样,有谁知道为什么他们
我在同时运行 64 位 Oracle 10.2 的 64 位 Itanium 服务器上运行 Windows Server 2003,我想为 Python 2.5 安装 cx_Oracle。我之前在 W
我是一名优秀的程序员,十分优秀!