未验证 提交 7442f620 编写于 作者: O openharmony_ci 提交者: Gitee

!280 fix: 修复kill进程导致死锁的问题

Merge pull request !280 from zhushengle/kill
......@@ -3,7 +3,9 @@
#include <signal.h>
#include <atomic.h>
#include <pthread.h>
#include "syscall.h"
#include "libc.h"
#include <bits/errno.h>
pthread_mutex_t __exit_mutex = PTHREAD_MUTEX_INITIALIZER;
......@@ -33,9 +35,13 @@ _Noreturn void exit(int code)
{
sigset_t set;
pthread_mutex_lock(&__exit_mutex);
__block_app_sigs(&set);
int ret = pthread_mutex_trylock(&__exit_mutex);
if (ret == EBUSY) {
pthread_exit(NULL);
}
__funcs_on_exit();
__libc_exit_fini();
__stdio_exit();
......
#include "stdio_impl.h"
static FILE *volatile dummy_file = 0;
weak_alias(dummy_file, __stdin_used);
weak_alias(dummy_file, __stdout_used);
weak_alias(dummy_file, __stderr_used);
static void close_file(FILE *f)
{
if (!f) return;
if (f->wpos != f->wbase) f->write(f, 0, 0);
if (f->rpos != f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR);
}
void __stdio_exit(void)
{
FILE *f;
for (f=*__ofl_lock(); f; f=f->next) close_file(f);
close_file(__stdin_used);
close_file(__stdout_used);
close_file(__stderr_used);
}
weak_alias(__stdio_exit, __stdio_exit_needed);
......@@ -5,7 +5,9 @@
#include <signal.h>
#include <atomic.h>
#include <pthread.h>
#include "syscall.h"
#include "libc.h"
#include <bits/errno.h>
extern bool g_enable_check;
extern void mem_check_deinit(void);
......@@ -38,9 +40,13 @@ _Noreturn void exit(int code)
{
sigset_t set;
pthread_mutex_lock(&__exit_mutex);
__block_app_sigs(&set);
int ret = pthread_mutex_trylock(&__exit_mutex);
if (ret == EBUSY) {
pthread_exit(NULL);
}
if (g_enable_check) {
check_leak();
check_heap_integrity();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册