AuroraRuntime/Source/IO/IPC/IPCHandle.hpp
J Reece Wilson fd0c5b51b2 Further Linux support
[+] Begin work on IO futexes for io release on process/thread exit
[+] Linux ::readdir iteration
[+] AuConsole buffering API
[*] Fix sleep as to not get interrupted by signals
[*] Switch the type of FS lock used under Linux
[*] Linux: Use new IPCHandle encoding scheme
[*] Fix undefined behaviour: unintialized timeout values (AuLoop/Linux)
[*] Fix undefined behaviour: ConsoleTTY clear line was called of a color of a random value on stack
[-] Remainings of std dir iterator
[*] Fix pthread_kill (aka send signal to pthread handle) always kills process. This is what you expect bc signal handler inheritance.
[*] Reformat the build Aurora.json file
[+] Added clang warning ignores to the build file
[*] Fix: UNIX need to use STDOUT_FILENO. Was using CRT handle in place of fd by mistake.
[+] Linux implementation for IO yield (AuIO::IOYield() - UNIX::LinuxOverlappedYield())
[*] Fix: Linux async end of stream processing. res 0 = zero bytes consumed. <= was detecting this as an error of code 0. Should succeed with zero bytes.
[+] Linux LoopQueue missing epilogue hook for the IO processor
[*] Various refactors and minor bug fixes
[*] Linux fix: Handle pipe EOS as zero
[*] Linux fix: thread termination via a user signal of 77. Need a force terminate.
[*] IPC handle: fix improper int to bool cast in the header setup within ToString
[*] Linux fix: HWInfo CPU topology regression
[-] Linux fix: remove SIGABRT handler
[*] Missing override in compression, exit, and consoletty headers.
[+] Unix Syslog logger backend
2022-08-02 05:52:57 +01:00

94 lines
1.7 KiB
C++

/***
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: IPCHandle.hpp
Date: 2022-4-13
Author: Reece
***/
#pragma once
namespace Aurora::IO::IPC
{
AUE_DEFINE(EIPCHandleType, (
eIPCPipe,
eIPCMemory,
eIPCSharedFd,
eIPCPrimitiveSemaphore,
eIPCPrimitiveMutex,
eIPCPrimitiveEvent,
eIPCPipeEnd
));
struct IPCToken
{
IPCToken();
AuUInt word {};
AuUInt32 pid {};
union
{
char path[16];
struct
{
AuUInt32 cookie;
};
};
void NewId();
AuString ToNTPath() const;
AuUInt32 ToUnixServerCookie() const;
#if defined(AURORA_IS_POSIX_DERIVED)
pid_t ToUnixPid() const;
#endif
};
struct IPCValue
{
EIPCHandleType subtype;
IPCToken token;
};
#pragma pack(push)
#pragma pack(1)
struct IPCHeader
{
union
{
struct
{
AuUInt8 bmType : 3;
AuUInt8 bmHasWord : 1;
AuUInt8 bmHasPid : 1;
AuUInt8 bmArray : 3;
};
AuUInt8 bValue;
};
};
#pragma pack(pop)
static_assert(sizeof(IPCHeader) == 1);
struct IPCHandle
{
IPCHandle();
bool IsTopEq(EIPCHandleType type) const;
bool PushId(EIPCHandleType type, const IPCToken &token);
IPCValue *GetToken(EIPCHandleType type, int id);
AuUInt32 pid {};
AuList<IPCValue> values;
bool FromString(const AuString &in);
AuString ToString() const;
#if defined(AURORA_IS_POSIX_DERIVED)
pid_t ToUnixPid() const;
#endif
};
}