?
Current File : //usr/src/file_protector-1.1-1487/transport/exit_event.c
/**
@file
@brief    'exit' event
@details  Copyright (c) 2017-2018 Acronis International GmbH
@author   Mikhail Krivtsov (mikhail.krivtsov@acronis.com)
@since    $Id: $
*/

#include "exit_event.h"

#include "debug.h"
#include "message.h"
#include "task_info_map.h"

void exit_event_nowait(pid_t tgid, pid_t pid)
{
	msg_t *msg;
	size_t exit_img_size;
	size_t msg_img_size;

	if (TS_IGNORE == task_info_status_get(tgid)
	|| (pid != tgid && TS_IGNORE == task_info_status_get(pid))) {
		DPRINTF("process is in 'ignore list'");
		goto out;
	}

	exit_img_size = sizeof(exit_img_t);
	msg_img_size = sizeof(msg_img_t) + exit_img_size;

	msg = msg_new_type_nowait(msg_img_size, MT_EXIT);
	if (msg) {
		msg_img_t *msg_img = MSG_IMG(msg);
		exit_img_t *exit_img = IMG_PAYLOAD(msg_img);
		/*
		 * userspace kernel
		 * getpid()  current->tgid
		 * gettid()  current->pid
		 */
		exit_img->pid = tgid;
		exit_img->tid = pid;

		send_msg_async(msg);
		msg_unref(msg);
	}
out:	;
}