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 {
9494 /// buffer, or in the case of a zero size buffer, when the item has been retrieved by a getter.
9595 /// Or when the channel is destroyed.
9696 pub fn put(self: *SelfChannel, data: T) void {
97 var my_tick_node = Loop.NextTickNode.init(@frame());
98 var queue_node = std.atomic.Queue(PutNode).Node.init(PutNode{
99 .tick_node = &my_tick_node,
100 .data = data,
101 });
97 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
98 var queue_node = std.atomic.Queue(PutNode).Node{
99 .data = PutNode{
100 .tick_node = &my_tick_node,
101 .data = data,
102 },
103 };
102104
103105 suspend {
104106 self.putters.put(&queue_node);
......@@ -113,13 +115,15 @@ pub fn Channel(comptime T: type) type {
113115 pub fn get(self: *SelfChannel) callconv(.Async) T {
114116 // TODO https://github.com/ziglang/zig/issues/2765
115117 var result: T = undefined;
116 var my_tick_node = Loop.NextTickNode.init(@frame());
117 var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{
118 .tick_node = &my_tick_node,
119 .data = GetNode.Data{
120 .Normal = GetNode.Normal{ .ptr = &result },
118 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
119 var queue_node = std.atomic.Queue(GetNode).Node{
120 .data = GetNode{
121 .tick_node = &my_tick_node,
122 .data = GetNode.Data{
123 .Normal = GetNode.Normal{ .ptr = &result },
124 },
121125 },
122 });
126 };
123127
124128 suspend {
125129 self.getters.put(&queue_node);
......@@ -145,17 +149,19 @@ pub fn Channel(comptime T: type) type {
145149 // TODO integrate this function with named return values
146150 // so we can get rid of this extra result copy
147151 var result: ?T = null;
148 var my_tick_node = Loop.NextTickNode.init(@frame());
149 var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node.init(undefined);
150 var queue_node = std.atomic.Queue(GetNode).Node.init(GetNode{
151 .tick_node = &my_tick_node,
152 .data = GetNode.Data{
153 .OrNull = GetNode.OrNull{
154 .ptr = &result,
155 .or_null = &or_null_node,
152 var my_tick_node = Loop.NextTickNode{ .data = @frame() };
153 var or_null_node = std.atomic.Queue(*std.atomic.Queue(GetNode).Node).Node{ .data = undefined };
154 var queue_node = std.atomic.Queue(GetNode).Node{
155 .data = GetNode{
156 .tick_node = &my_tick_node,
157 .data = GetNode.Data{
158 .OrNull = GetNode.OrNull{
159 .ptr = &result,
160 .or_null = &or_null_node,
161 },
156162 },
157163 },
158 });
164 };
159165 or_null_node.data = &queue_node;
160166
161167 suspend {