-
-
Notifications
You must be signed in to change notification settings - Fork 563
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hook失效 #351
Comments
@eVen-p |
co::wait_group wp(os::cpunum()); // 初始值与 done()协程数一致
for(int i = 0; i < os::cpunum(); i++) {
go(f);
}
go([wp] { // --------------传值
// 如果所有线程都被阻塞,这里就不会被执行
std::cout << "hi" << std::endl;
wp.done();
});
std::cout << "start to wait" << std::endl;
wp.wait(); |
感谢指正,我已经把wp改成传值。 另外wait_group的初始值,原来的初值1已经是和 这两处更改我都做了尝试,demo的运行结果还是没有变化,看起来阻塞的依旧是线程。 |
对端有发送数据吗?没数据的话,"recv"就是卡住的 另外,程序启动时加上 |
对端没有发送数据,我构造这个demo的想法就是,让这个api阻塞住,如果阻塞的是线程,那main就会卡在 |
不会阻塞线程 hook日志有吗? |
我尝试了换了一个系统,macOS上面是正常的,demo行为都符合预期 关于hook日志,运行时我加了 |
mac 与 linux hook机制不一样 日志默认打印到文件中,加 |
linux下使用静态库时demo打印如下(os::cpunum() == 2):
链接动态库时打印如下:
|
尝试了一下动态库,输出如下:
多了socket的hook log,但是后面的log就没有了;程序依旧阻塞。 另外查看了符号表:
|
看看 |
动态库如下
另外静态库的符号表如下:
|
libco.so里已经导出 |
Hi
我在linux下发现可能存在hook未生效的问题,一些系统api会阻塞线程,而hook后依旧阻塞了线程(没有变成阻塞协程)。我写了一个小demo来进行验证,发现如果我的demo链接静态库libco.a那么hook是正常的,如果链接动态库libco.so,看起来hook没有生效。
如下是demo代码:
最终结果是,如果链接libco.a,程序可以正常退出;如果链接了动态库libco.so,那么程序阻塞,无法退出。
我尝试了3.0.0和3.0.1,现象都是一样的。我的libco.a和libco.so均由xmake编译得到。
另外我也尝试了在3.0.0上使用cmake编译,发现无论是静态库还是动态库,均无法正常退出。请问是否是我使用的方式不对呢?
附上我demo的CMakeLists.txt:
demo目录结构:
├── build
│ └── CMakeLists.txt
├── include
│ └── co...
├── src
│ └── test.cpp
├── lib
│ └── libco.a
└── out
系统:CentOS7,gcc 4.8.5
The text was updated successfully, but these errors were encountered: