/
usr
/
src
/
file_protector-1.1-1507
/
File Upload :
llllll
Current File: //usr/src/file_protector-1.1-1507/task_info_map.h
/** @file @brief Process (aka task) info storage @details Copyright (c) 2017-2021 Acronis International GmbH @author Ivan Matveev (ivan.matveev@acronis.com) @since $Id: $ */ #pragma once #include "transport_protocol.h" // task_status_t #include <linux/path.h> #include <linux/rbtree.h> #include <linux/spinlock.h> #include <linux/types.h> // bool typedef struct { struct rb_node rb_node; pid_t pid; atomic_t ref_cnt; spinlock_t spinlock; task_status_t status; struct path exe_path; struct list_head exited_list_item; } task_info_t; const char *task_status_to_string(task_status_t status); task_info_t *task_info_ref(task_info_t *info); void task_info_unref(task_info_t *info); int task_info_map_init(void); void task_info_map_down(void); void task_info_map_clear(void); // if not found return NULL task_info_t *task_info_lookup(pid_t pid); task_info_t *task_info_get(pid_t pid); // errors: // 1. ENOMEM - alloc failed // 2. EINVAL - task_info with sutch pid already exist // on success return 0 int task_info_map_add(pid_t pid, task_status_t status, struct path exe_path); // Same as task_info_map_add(), but before call should call 'task_info_map_lock()' int task_info_map_add_impl(pid_t pid, task_status_t status, struct path exe_path); int task_info_map_del(pid_t pid); // ========================= useful wrappers ========================= // // if pid not found return TS_UNKNOWN task_status_t task_info_status_get(pid_t pid); // create task_info struct if needed // errors: // 1. ENOMEM - alloc failed // 2. ENOENT - no such pid or task_struct without executable file // 3. EINVAL - task_info with sutch pid already exist - synchronisation broken int task_info_status_set(pid_t pid, task_status_t status); void task_info_map_delete_exited(void); void task_info_map_on_exit_event(pid_t tgid, pid_t pid);
Copyright ©2k19 -
Hexid
|
Tex7ure