authorgravatar for emekankurumeh@outlook.comemekoi <emekankurumeh@outlook.com> 2018-11-27 16:20:09+00:00
committergravatar for emekankurumeh@outlook.comemekoi <emekankurumeh@outlook.com> 2019-01-11 09:56:36-06:00
log35d93d22db6f1cdf20011b0db84586107513b462
tree50a55d1cb60ed27bfad5566be98b75956125f1f4
parent93851270526e71407b4225a23daa66214a4010f9

removed nullables


2 files changed, 29 insertions(+), 38 deletions(-)

std/mutex.zig+24-31
......@@ -62,57 +62,50 @@ pub const Mutex = switch(builtin.os) {
6262 },
6363 builtin.Os.windows => struct {
6464
65 lock: ?windows.CRITICAL_SECTION,
66 init_once: windows.PINIT_ONCE,
65 lock: windows.CRITICAL_SECTION,
66 init_once: windows.RTL_RUN_ONCE,
6767
6868 pub const Held = struct {
6969 mutex: *Mutex,
7070
7171 pub fn release(self: Held) void {
72 if (self.mutex.lock) |*lock| {
73 windows.LeaveCriticalSection(lock);
74 }
72 windows.LeaveCriticalSection(&self.mutex.lock);
7573 }
7674 };
7775
7876 pub fn init() Mutex {
79 return Mutex {
80 .lock = null,
77 return Mutex {
78 .lock = undefined,
8179 .init_once = undefined,
8280 };
8381 }
8482
85 extern fn initCriticalSection(InitOnce: *windows.PINIT_ONCE, Parameter: ?windows.PVOID, Context: ?windows.PVOID) windows.BOOL {
86 if (Context) |ctx| {
87 var mutex = @ptrCast(*?windows.CRITICAL_SECTION, @alignCast(8, ctx));
88 if (mutex.* == null) {
89 var lock: windows.CRITICAL_SECTION = undefined;
90 windows.InitializeCriticalSection(&lock);
91 mutex.* = lock;
92 }
93 return windows.TRUE;
94 }
95 return windows.FALSE;
83 extern fn initCriticalSection(
84 InitOnce: *windows.RTL_RUN_ONCE,
85 Parameter: ?windows.PVOID,
86 Context: ?windows.PVOID
87 ) windows.BOOL {
88 var lock = @ptrCast(
89 *windows.CRITICAL_SECTION,
90 @alignCast(@alignOf(*windows.CRITICAL_SECTION), ctx.?)
91 );
92 windows.InitializeCriticalSection(lock);
93 return windows.TRUE;
9694 }
9795
9896 pub fn deinit(self: *Mutex) void {
99 if (self.lock) |*lock| {
100 windows.DeleteCriticalSection(lock);
101 }
97 windows.DeleteCriticalSection(&self.lock);
10298 }
10399
104100 pub fn acquire(self: *Mutex) Held {
105 if (self.lock) |*lock| {
106 windows.EnterCriticalSection(lock);
107 } else {
108 var mutex = @ptrCast(?windows.PVOID, self);
109 if (windows.InitOnceExecuteOnce(&self.init_once, initCriticalSection, null, mutex) == windows.TRUE) {
110 windows.EnterCriticalSection(&self.lock.?);
111 } else {
112 @panic("unable to initialize Mutex");
113 }
101 if (windows.InitOnceExecuteOnce(
102 &self.init_once,
103 initCriticalSection,
104 null, @ptrCast(?windows.PVOID, self)
105 ) == windows.FALSE) {
106 unreachable;
114107 }
115
108 windows.EnterCriticalSection(&self.lock);
116109 return Held { .mutex = self };
117110 }
118111 },
std/os/windows/kernel32.zig+5-7
......@@ -222,9 +222,9 @@ pub const FOREGROUND_RED = 4;
222222pub const FOREGROUND_INTENSITY = 8;
223223
224224pub extern "kernel32" stdcallcc fn InitializeCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
225pub extern "kernel32" stdcallcc fn EnterCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
226pub extern "kernel32" stdcallcc fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
227pub extern "kernel32" stdcallcc fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
225pub extern "kernel32" stdcallcc fn EnterCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
226pub extern "kernel32" stdcallcc fn LeaveCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
227pub extern "kernel32" stdcallcc fn DeleteCriticalSection(lpCriticalSection: *CRITICAL_SECTION) void;
228228
229229pub const LIST_ENTRY = extern struct {
230230 Flink: *LIST_ENTRY,
......@@ -254,12 +254,10 @@ pub const RTL_CRITICAL_SECTION = extern struct {
254254
255255pub const CRITICAL_SECTION = RTL_CRITICAL_SECTION;
256256
257pub extern "kernel32" stdcallcc fn InitOnceExecuteOnce(InitOnce: *PINIT_ONCE, InitFn: PINIT_ONCE_FN, Context: ?PVOID, Parameter: ?LPVOID) BOOL;
257pub extern "kernel32" stdcallcc fn InitOnceExecuteOnce(InitOnce: *RTL_RUN_ONCE, InitFn: PINIT_ONCE_FN, Context: ?PVOID, Parameter: ?LPVOID) BOOL;
258258
259pub const PINIT_ONCE_FN = ?extern fn(InitOnce: *PINIT_ONCE, Parameter: ?PVOID, Context: ?PVOID) BOOL;
259pub const PINIT_ONCE_FN = ?extern fn(InitOnce: *RTL_RUN_ONCE, Parameter: ?PVOID, Context: ?PVOID) BOOL;
260260
261261pub const RTL_RUN_ONCE = extern struct {
262262 Ptr: PVOID,
263263};
264
265pub const PINIT_ONCE = RTL_RUN_ONCE;