ReactOS 0.4.16-dev-1946-g52006dd
sys_arch.c File Reference
#include <debug.h>
#include <lwip/sys.h>
#include "lwip_glue.h"
Include dependency graph for sys_arch.c:

Go to the source code of this file.

Classes

struct  _thread_t
 

Typedefs

typedef struct _thread_tthread_t
 

Functions

u32_t sys_now (void)
 
void sys_arch_protect (sys_prot_t *lev)
 
void sys_arch_unprotect (sys_prot_t lev)
 
err_t sys_sem_new (sys_sem_t *sem, u8_t count)
 
int sys_sem_valid (sys_sem_t *sem)
 
void sys_sem_set_invalid (sys_sem_t *sem)
 
void sys_sem_free (sys_sem_t *sem)
 
void sys_sem_signal (sys_sem_t *sem)
 
u32_t sys_arch_sem_wait (sys_sem_t *sem, u32_t timeout)
 
err_t sys_mbox_new (sys_mbox_t *mbox, int size)
 
int sys_mbox_valid (sys_mbox_t *mbox)
 
void sys_mbox_set_invalid (sys_mbox_t *mbox)
 
void sys_mbox_free (sys_mbox_t *mbox)
 
void sys_mbox_post (sys_mbox_t *mbox, void *msg)
 
u32_t sys_arch_mbox_fetch (sys_mbox_t *mbox, void **msg, u32_t timeout)
 
u32_t sys_arch_mbox_tryfetch (sys_mbox_t *mbox, void **msg)
 
err_t sys_mbox_trypost (sys_mbox_t *mbox, void *msg)
 
VOID NTAPI LwipThreadMain (PVOID Context)
 
sys_thread_t sys_thread_new (const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
 
void sys_init (void)
 
void sys_shutdown (void)
 

Variables

static LIST_ENTRY ThreadListHead
 
static KSPIN_LOCK ThreadListLock
 
static ERESOURCE GlobalLock
 
static ULONG GlobalLockLevel = 0
 
KEVENT TerminationEvent
 
NPAGED_LOOKASIDE_LIST MessageLookasideList
 
NPAGED_LOOKASIDE_LIST QueueEntryLookasideList
 
static LARGE_INTEGER StartTime
 

Typedef Documentation

◆ thread_t

Function Documentation

◆ LwipThreadMain()

VOID NTAPI LwipThreadMain ( PVOID  Context)

Definition at line 260 of file sys_arch.c.

261{
262 thread_t Container = (thread_t)Context;
264
266
267 Container->ThreadFunction(Container->ThreadContext);
268
270 RemoveEntryList(&Container->ListEntry);
272
273 ExFreePool(Container);
274
276}
#define RemoveEntryList(Entry)
Definition: env_spec_w32.h:986
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
PLIST_ENTRY NTAPI ExInterlockedInsertHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
Definition: interlocked.c:114
static LIST_ENTRY ThreadListHead
Definition: sys_arch.c:6
static KSPIN_LOCK ThreadListLock
Definition: sys_arch.c:7
struct _thread_t * thread_t
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
Definition: kill.c:1145
#define STATUS_SUCCESS
Definition: shellext.h:65
void(* ThreadFunction)(void *arg)
Definition: sys_arch.c:20
void * ThreadContext
Definition: sys_arch.c:21
LIST_ENTRY ListEntry
Definition: sys_arch.c:22
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

Referenced by sys_thread_new().

◆ sys_arch_protect()

void sys_arch_protect ( sys_prot_t lev)

Definition at line 35 of file sys_arch.c.

36{
37 /* Acquire the global resource to prevent other CPUs from running */
39 *lev = ++GlobalLockLevel;
40}
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
static ULONG GlobalLockLevel
Definition: sys_arch.c:9
PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceExclusive(IN PERESOURCE Resource)
Definition: resource.c:2194

◆ sys_arch_unprotect()

void sys_arch_unprotect ( sys_prot_t  lev)

Definition at line 43 of file sys_arch.c.

44{
45 /* Release the global resource */
46 ASSERT((GlobalLockLevel > 0) && (lev == GlobalLockLevel));
49}
#define ASSERT(a)
Definition: mode.c:44
VOID FASTCALL ExReleaseResourceAndLeaveCriticalRegion(IN PERESOURCE Resource)
Definition: resource.c:2283

◆ sys_shutdown()

void sys_shutdown ( void  )

Definition at line 336 of file sys_arch.c.

337{
338 PLIST_ENTRY CurrentEntry;
339 thread_t Container;
340
341 /* Set the termination event */
343
344 /* Loop through the thread list and wait for each to die */
346 {
347 Container = CONTAINING_RECORD(CurrentEntry, struct _thread_t, ListEntry);
348
349 if (Container->ThreadFunction)
350 {
351 KeWaitForSingleObject(Container->Handle,
352 Executive,
354 FALSE,
355 NULL);
356
357 ZwClose(Container->Handle);
358 }
359 }
360
363}
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
PLIST_ENTRY NTAPI ExInterlockedRemoveHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PKSPIN_LOCK Lock)
Definition: interlocked.c:166
KEVENT TerminationEvent
Definition: sys_arch.c:11
NPAGED_LOOKASIDE_LIST MessageLookasideList
Definition: sys_arch.c:12
NPAGED_LOOKASIDE_LIST QueueEntryLookasideList
Definition: sys_arch.c:13
VOID NTAPI ExDeleteNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside)
Definition: lookas.c:170
#define KernelMode
Definition: asm.h:38
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
Definition: typedefs.h:120
HANDLE Handle
Definition: sys_arch.c:19
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
#define IO_NO_INCREMENT
Definition: iotypes.h:598
@ Executive
Definition: ketypes.h:467

Referenced by LibIPShutdown().

Variable Documentation

◆ GlobalLock

ERESOURCE GlobalLock
static

Definition at line 8 of file sys_arch.c.

Referenced by _clipboard_range_contains(), CRecyclerDropTarget::_DoDeleteDataObject(), CFSDropTarget::_DoDrop(), AdvProcDetailsDlgProc(), alloc_and_set_onevalue(), BeginUpdateResourceW(), BitmapFromClipboardDIB(), BitmapToClipboardDIB(), bsc_OnStopBinding(), C1_OnButtonUp(), C1_OnCreate(), C1_OnDestroy(), C1_OnDraw(), C1_OnImeControl(), C1_OnMouseMove(), C1_OnSetCursor(), C1_SetData(), check_dib_size(), check_get(), check_iml_data(), check_output(), check_output_raw(), ClipboardReadBitmap(), ClipboardReadEnhMetafile(), ClipboardReadMemoryBlock(), ClipboardReadMetafile(), ClipboardReadPalette(), ClipboardWriteMemory(), CommandLineToArgvT(), CompressBegin(), anonymous_namespace{mstscax.cpp}::CoClass::ControlInfoToString(), copy_stg_medium(), CopyBlock(), CopyCurrentGlyph(), CopyEventEntry(), CopyKeyName(), CopyLines(), CopyMemToClipboard(), CopyStgMedium(), CopyTextToClipboard(), create_decoder(), create_dib(), create_execute(), create_map_from_stream(), create_metafile(), create_metafilepict(), create_mfpict(), create_poke(), create_stream(), create_stream_from_map(), create_stream_on_data(), create_stream_on_file(), create_stream_on_mip_ro(), create_text(), create_textA(), create_textW(), CreateDIBPatternBrush(), CreateMemoryDialog(), D3DXSaveSurfaceToFileInMemory(), DataCache_Draw(), DataCache_GetExtent(), DataObjectImpl_CreateComplex(), DataObjectImpl_CreateText(), DataObjectImpl_Release(), dde_msg_client_wndproc(), dde_server_wndproc(), dde_server_wndprocA(), dde_server_wndprocW(), DdeAccessData(), DdeCreateDataHandle(), TMouse::doClip(), CDefaultContextMenu::DoCopyOrCut(), CDefaultContextMenu::DoPaste(), DoSanitizeClipboard(), DragQueryFileA(), DragQueryFileW(), DragQueryPoint(), DrawTextFromClipboard(), CExeDropHandler::Drop(), dup_global_mem(), dup_metafilepict(), EDIT_WM_Copy(), EDIT_WM_Paste(), EndUpdateResourceW(), ExtCreatePen(), FILEDLG95_FILENAME_FillFromSelection(), ShellDirectory::fill_w32fdata_shell(), free_metafilepict(), GdiConvertMetaFilePict(), GdiCreateLocalMetaFilePict(), get_current_dataobject(), get_current_ole_clip_window(), get_descriptors(), get_onevalue(), get_priv_data(), get_stgdef(), get_unicode_text(), GetClipboardData(), GetClipboardDataDimensions(), PIDList::GetData(), GetHGlobalFromILockBytes(), GetNumSelected(), GetPidlFromDataObject(), GlobalFix(), GlobalWire(), GuiPasteToTextModeBuffer(), handle_read(), handle_write(), HEXEDIT_Copy(), HEXEDIT_Paste(), HGLOBAL_UserMarshal(), HGLOBAL_UserUnmarshal(), HGLOBALLockBytesImpl_ReadAt(), HGLOBALLockBytesImpl_WriteAt(), HMETAFILEPICT_UserFree(), HMETAFILEPICT_UserMarshal(), HMETAFILEPICT_UserSize(), HMETAFILEPICT_UserUnmarshal(), ICImageDecompress(), BtrfsContextMenu::Initialize(), BtrfsPropSheet::Initialize(), BtrfsVolPropSheet::Initialize(), CZipFolder::Initialize(), CLayerUIPropPage::Initialize(), IntSynthesizeMultiByte(), IntSynthesizeWideChar(), BtrfsContextMenu::InvokeCommand(), InvokeObjectPickerDialog(), InvokeRemoteRegistryPickerDialog(), is_fixed(), is_moveable(), IsDataUnicode(), IsMovable(), load_dib(), load_image(), load_mf_pict(), LoadImageFromFileHandle(), LocalLock(), MainWndProc(), make_dc(), marshal_WdtpInterfacePointer(), ME_AppendToHGLOBAL(), ME_ReadFromHGLOBALRTF(), ME_ReadFromHGLOBALUnicode(), MessageBoxTextToClipboard(), MsgiKMToUMMessage(), MsgiUMToKMMessage(), NoStatStreamImpl_Read(), NoStatStreamImpl_Write(), ok_attributes_(), OleCreateMenuDescriptor(), OleDuplicateData(), OLEMenu_CallWndProc(), OLEMenu_GetMsgProc(), OleMetafilePictFromIconAndLabel(), OleSetMenuDescriptor(), DesktopDropTarget::OnDrop(), TreeDropTarget::OnDrop(), OnPaint(), OverrideFileContent(), PackDDElParam(), pagesetup_change_printer_dialog(), pagesetup_get_a_devname(), pagesetup_get_devmode(), pagesetup_get_orientation(), pagesetup_get_papersize(), pagesetup_set_defaultsource(), pagesetup_set_devmode(), pagesetup_set_devnames(), pagesetup_set_orientation(), pagesetup_set_papersize(), Tnclip::Paste(), PasteIntoCurrentGlyph(), PlayMetaFileFromClipboard(), post_dde_message(), PRINTDLG_ChangePrinterA(), PRINTDLG_ChangePrinterW(), PRINTDLG_CreateDCA(), PRINTDLG_CreateDCW(), PRINTDLG_CreateDevNames(), PRINTDLG_CreateDevNamesW(), PRINTDLG_WMInitDialog(), PRINTDLG_WMInitDialogW(), PrintDlgA(), PrintDlgW(), QueryDeskCplExtInterface(), QueryDeskCplString(), ReadClipboard(), CConsole::ReadLine(), ReleaseStgMedium(), render_embed_source_hack(), RenderFILENAMEA(), RenderFILENAMEW(), RenderHDROP(), RenderSHELLIDLIST(), ReuseDDElParam(), RunningObjectTableImpl_Register(), save_dib(), save_mfpict(), set_clipboard_formats(), set_dataobject_format(), SetClipboard(), SetClipboardData(), SetDIBitsToDeviceFromClipboard(), SHGetRealIDL(), show_reflink_paste(), snapshot_GetDataHere(), START_TEST(), stgmedium_cmp(), subtest_InsertObject(), synthesize_bitmap(), synthesize_dib(), synthesize_emf(), sys_arch_protect(), sys_arch_unprotect(), T1_OnButtonUp(), T1_OnCreate(), T1_OnDestroy(), T1_OnDraw(), T1_OnImeControl(), T1_OnMouseMove(), T1_OnSetCursor(), T1_SetData(), test_apm(), test_brush_pens(), test_bufferrawformat(), test_cf_dataobject(), test_componentinfo(), test_CopyStgMedium(), test_createfromstream(), test_createProcessingInstruction(), test_data_cache_dib_contents_stream(), test_data_handles(), test_DataObject_FirstFile(), test_DataObject_FirstFolder(), test_decode(), test_decode_1bpp(), test_decode_24bpp(), test_decode_4bpp(), test_decode_adobe_cmyk(), test_decode_bitfields(), test_decode_rle4(), test_decode_rle8(), test_DeviceCapabilities(), test_DragQueryFile(), test_EM_GETMODIFY(), test_empty_image(), test_empty_image_2(), test_enhmetafile(), test_EnumObjects_Files(), test_EnumObjects_Folders(), test_freed_hglobal(), test_freethreadedmarshaldata(), test_GdipLoadImageFromStream(), test_GlobalAlloc(), test_handles_process(), test_handles_process_open(), test_handles_thread2(), test_heap(), test_Invoke(), test_load_save_bmp(), test_load_save_emf(), test_load_save_empty_picture(), test_load_save_icon(), test_loadwmf(), test_marshal_HGLOBAL(), test_marshal_HMETAFILEPICT(), test_metafile(), test_moniker(), test_multiframegif(), test_mxwriter_encoding(), test_omitxmldeclaration(), test_PackDDElParam(), test_paste(), test_pattern_brush(), test_persist_save_data(), test_pic(), test_PrintDlgA(), test_PrintDlgExW(), test_resolution(), test_save(), test_set_clipboard(), test_single_source(), test_synthesized(), test_UnpackDDElParam(), test_writeenddocument(), TestDefaultFormat(), TestGlobalFlagsFixed(), TestGlobalFlagsMoveable(), TestGlobalHandle(), TestGlobalLockNUnlock(), TestGlobalReAllocFixed(), TestGlobalReAllocMovable(), TestSetAndGetExtraFormat(), unpack_dde_message(), UnpackDDElParam(), update_devmode_handleA(), update_devmode_handleW(), UpdateResourceW(), WDML_BuildExecuteCommand(), WDML_ClientQueueAdvise(), WDML_ClientQueuePoke(), WDML_DataHandle2Global(), WDML_Global2DataHandle(), WDML_IsAppOwned(), WDML_ServerHandleAdvise(), WDML_ServerHandleExecute(), WDML_ServerHandlePoke(), WdtpInterfacePointer_UserMarshal(), WdtpInterfacePointer_UserUnmarshal(), WinHelpA(), wmain(), WndProc(), WorkerThread(), and xslprocessor_transform().

◆ GlobalLockLevel

ULONG GlobalLockLevel = 0
static

Definition at line 9 of file sys_arch.c.

Referenced by sys_arch_protect(), and sys_arch_unprotect().

◆ MessageLookasideList

◆ QueueEntryLookasideList

◆ StartTime

◆ TerminationEvent

KEVENT TerminationEvent

◆ ThreadListHead

LIST_ENTRY ThreadListHead
static

Definition at line 6 of file sys_arch.c.

Referenced by LwipThreadMain(), NtQueryInformationThread(), sys_init(), and sys_shutdown().

◆ ThreadListLock

KSPIN_LOCK ThreadListLock
static

Definition at line 7 of file sys_arch.c.

Referenced by LwipThreadMain(), sys_init(), and sys_shutdown().