mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-22 04:52:56 +01:00
This patch simplifies the system call bindings. The common syscall bindings in 'src/platform/' have been reduced to the syscalls needed by non-core programs. The additional syscalls that are needed solely by core have been moved to 'src/core/include/core_linux_syscalls.h'. Furthermore, the resource path is not used outside of core anymore. Hence, we could get rid of the rpath library. The resource-path code has been moved to 'src/core/include/resource_path.h'. The IPC-related parts of 'src/platform' have been moved to the IPC library. So there is now a clean separation between low-level syscall bindings (in 'src/platform') and higher-level code. The code for the socket-descriptor registry is now located in the 'src/base/ipc/socket_descriptor_registry.h' header. The interface is separated from 'ipc.cc' because core needs to access the registry from outside the ipc library.
70 lines
1.2 KiB
C++
70 lines
1.2 KiB
C++
/*
|
|
* \brief Linux-specific platform thread implementation
|
|
* \author Norman Feske
|
|
* \date 2007-10-15
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2007-2012 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU General Public License version 2.
|
|
*/
|
|
|
|
/* Genode includes */
|
|
#include <util/token.h>
|
|
#include <util/misc_math.h>
|
|
#include <base/printf.h>
|
|
|
|
/* local includes */
|
|
#include "platform_thread.h"
|
|
#include "server_socket_pair.h"
|
|
|
|
using namespace Genode;
|
|
|
|
|
|
typedef Token<Scanner_policy_identifier_with_underline> Tid_token;
|
|
|
|
|
|
Platform_thread::Platform_thread(const char *name, unsigned, addr_t)
|
|
: _tid(-1), _pid(-1)
|
|
{
|
|
strncpy(_name, name, min(sizeof(_name), strlen(name)));
|
|
}
|
|
|
|
|
|
void Platform_thread::cancel_blocking()
|
|
{
|
|
PDBG("send cancel-blocking signal to %ld\n", _tid);
|
|
lx_tgkill(_pid, _tid, LX_SIGUSR1);
|
|
}
|
|
|
|
|
|
void Platform_thread::pause()
|
|
{
|
|
PDBG("not implemented");
|
|
}
|
|
|
|
|
|
void Platform_thread::resume()
|
|
{
|
|
PDBG("not implemented");
|
|
}
|
|
|
|
|
|
int Platform_thread::client_sd()
|
|
{
|
|
/* construct socket pair on first call */
|
|
if (_ncs.client_sd == -1)
|
|
_ncs = create_server_socket_pair(_tid);
|
|
|
|
return _ncs.client_sd;
|
|
}
|
|
|
|
|
|
int Platform_thread::server_sd()
|
|
{
|
|
client_sd();
|
|
return _ncs.server_sd;
|
|
}
|