authorgravatar for mattnite@protonmail.comMatthew Knight <mattnite@protonmail.com> 2020-10-14 18:33:53-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-10-14 21:33:53-04:00
log352976ed236030d88d5a7332433b0b37bf4bc41c
tree814ec95711cb6f473def9e7f4e9e0bdd17cd58cd
parentaa5ff867a2128249500a6757e48b6b2a0282caae
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Event Channel: updated linked list node initialization (#6652)

fixed node init method

1 files changed, 26 insertions(+), 20 deletions(-)

lib/std/event/channel.zig+26-20
...@@ -94,11 +94,13 @@ pub fn Channel(comptime T: type) type {...@@ -94,11 +94,13 @@ pub fn Channel(comptime T: type) type {
94 /// buffer, or in the case of a zero size buffer, when the item has been retrieved by a getter.94 /// buffer, or in the case of a zero size buffer, when the item has been retrieved by a getter.
95 /// Or when the channel is destroyed.95 /// Or when the channel is destroyed.
96 pub fn put(self: *SelfChannel, data: T) void {96 pub fn put(self: *SelfChannel, data: T) void {
97 var my_tick_node = Loop.NextTickNode.init(@frame());97 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
98 var queue_node = std.atomic.Queue(PutNode).Node.init(PutNode{98 var queue_node = std.atomic.Queue(PutNode).Node{
99 .tick_node = &my_tick_node,99 .data = PutNode{
100 .data = data,100 .tick_node = &my_tick_node,
101 });101 .data = data,
102 },
103 };
102104
103 suspend {105 suspend {
104 self.putters.put(&queue_node);106 self.putters.put(&queue_node);
...@@ -113,13 +115,15 @@ pub fn Channel(comptime T: type) type {...@@ -113,13 +115,15 @@ pub fn Channel(comptime T: type) type {
113 pub fn get(self: *SelfChannel) callconv(.Async) T {115 pub fn get(self: *SelfChannel) callconv(.Async) T {
114 // TODO https://github.com/ziglang/zig/issues/2765116 // TODO https://github.com/ziglang/zig/issues/2765
115 var result: T = undefined;117 var result: T = undefined;
116 var my_tick_node = Loop.NextTickNode.init(@frame());118 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
117 var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{119 var queue_node = std.atomic.Queue(GetNode).Node{
118 .tick_node = &my_tick_node,120 .data = GetNode{
119 .data = GetNode.Data{121 .tick_node = &my_tick_node,
120 .Normal = GetNode.Normal{ .ptr = &result },122 .data = GetNode.Data{
123 .Normal = GetNode.Normal{ .ptr = &result },
124 },
121 },125 },
122 });126 };
123127
124 suspend {128 suspend {
125 self.getters.put(&queue_node);129 self.getters.put(&queue_node);
...@@ -145,17 +149,19 @@ pub fn Channel(comptime T: type) type {...@@ -145,17 +149,19 @@ pub fn Channel(comptime T: type) type {
145 // TODO integrate this function with named return values149 // TODO integrate this function with named return values
146 // so we can get rid of this extra result copy150 // so we can get rid of this extra result copy
147 var result: ?T = null;151 var result: ?T = null;
148 var my_tick_node = Loop.NextTickNode.init(@frame());152 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
149 var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node.init(undefined);153 var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node{ .data = undefined };
150 var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{154 var queue_node = std.atomic.Queue(GetNode).Node{
151 .tick_node = &my_tick_node,155 .data = GetNode{
152 .data = GetNode.Data{156 .tick_node = &my_tick_node,
153 .OrNull = GetNode.OrNull{157 .data = GetNode.Data{
154 .ptr = &result,158 .OrNull = GetNode.OrNull{
155 .or_null = &or_null_node,159 .ptr = &result,
160 .or_null = &or_null_node,
161 },
156 },162 },
157 },163 },
158 });164 };
159 or_null_node.data = &queue_node;165 or_null_node.data = &queue_node;
160166
161 suspend {167 suspend {