hasp_monitor和hasp_verify程序退出前不再执行shm_unlink(); 为hasp_verify设置线程名"hasp"

This commit is contained in:
luwenpeng
2023-10-26 18:54:05 +08:00
parent 166fe0ad53
commit 1008d3616e

View File

@@ -7,6 +7,7 @@
#include <unistd.h> #include <unistd.h>
#include <pthread.h> #include <pthread.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/prctl.h>
#include "hasp_api.h" #include "hasp_api.h"
#include "hasp_vcode.h" #include "hasp_vcode.h"
@@ -49,11 +50,13 @@ static void signal_handler(int signo)
if (signo == SIGUSR1) if (signo == SIGUSR1)
{ {
LOG_LEVEL_SET_DEBUG(); LOG_LEVEL_SET_DEBUG();
LOG_INFO("hasp_monitor: recv SIGUSR1");
} }
if (signo == SIGUSR2) if (signo == SIGUSR2)
{ {
LOG_LEVEL_SET_INFO(); LOG_LEVEL_SET_INFO();
LOG_INFO("hasp_monitor: recv SIGUSR2");
} }
if (signo == SIGINT) if (signo == SIGINT)
@@ -634,11 +637,11 @@ void hasp_monitor(uint64_t feature_id, uint64_t interval)
munmap(shm, sizeof(struct shm_data)); munmap(shm, sizeof(struct shm_data));
/* /*
* Unlink the shared memory object. * hasp_monitor 退出时如果执行了 shm_unlink(), shm_key 文件会被释放
* Even if the peer process is still using the object, this is okay. * hasp_monitor 重启后会创建新的 shm_key 文件,而运行中的 firewall 则使用的是与旧的 shm_key 文件相关的共享内存
* The object will be removed only after all open references are closed. * 所以此处不执行 shm_unlink()
*/ */
shm_unlink(shm_key); // shm_unlink(shm_key);
return; return;
} }
@@ -656,6 +659,10 @@ static void *hasp_verify_cycle(void *arg)
LOG_INFO("hasp_verify: Expect Feature ID: %ld", expect_feature_id); LOG_INFO("hasp_verify: Expect Feature ID: %ld", expect_feature_id);
char thread_name[16];
snprintf(thread_name, sizeof(thread_name), "hasp");
prctl(PR_SET_NAME, (unsigned long long)thread_name, NULL, NULL, NULL);
signal(SIGUSR1, signal_handler); signal(SIGUSR1, signal_handler);
signal(SIGUSR2, signal_handler); signal(SIGUSR2, signal_handler);
@@ -711,22 +718,13 @@ error_out:
* Updates to the mapping are visible to other processes that map this file, and are carried through to the underlying file. * Updates to the mapping are visible to other processes that map this file, and are carried through to the underlying file.
* The file may not actually be updated until msync(2) or munmap() is called. * The file may not actually be updated until msync(2) or munmap() is called.
*/ */
if (addr) if (addr)
{ {
munmap(addr, size); munmap(addr, size);
addr = NULL; addr = NULL;
} }
/* // 此处不执行 shm_unlink(shm_key); 避免 firewall 退出时删除 shm_key 文件
* Unlink the shared memory object.
* Even if the peer process is still using the object, this is okay.
* The object will be removed only after all open references are closed.
*/
if (fd > 0)
{
shm_unlink(shm_key);
}
free(arg); free(arg);
arg = NULL; arg = NULL;