@@ -246,6 +246,11 @@ pub fn Server(comptime H: type) type {
246
246
middlewares : []const Middleware (H ) = &.{},
247
247
};
248
248
249
+ const MiddlewareItem = struct {
250
+ middleware : Middleware (H ),
251
+ node : std.SinglyLinkedList.Node = .{},
252
+ };
253
+
249
254
return struct {
250
255
handler : H ,
251
256
config : Config ,
@@ -259,7 +264,7 @@ pub fn Server(comptime H: type) type {
259
264
_max_request_per_connection : usize ,
260
265
_middlewares : []const Middleware (H ),
261
266
_websocket_state : websocket.server.WorkerState ,
262
- _middleware_registry : std .SinglyLinkedList ( Middleware ( H )) ,
267
+ _middleware_registry : std.SinglyLinkedList ,
263
268
264
269
const Self = @This ();
265
270
const Worker = if (blockingMode ()) worker .Blocking (* Self , WebsocketHandler ) else worker .NonBlocking (* Self , WebsocketHandler );
@@ -325,7 +330,8 @@ pub fn Server(comptime H: type) type {
325
330
326
331
var node = self ._middleware_registry .first ;
327
332
while (node ) | n | {
328
- n .data .deinit ();
333
+ const item : * MiddlewareItem = @fieldParentPtr ("node" , n );
334
+ item .middleware .deinit ();
329
335
node = n .next ;
330
336
}
331
337
@@ -575,7 +581,7 @@ pub fn Server(comptime H: type) type {
575
581
pub fn middleware (self : * Self , comptime M : type , config : M.Config ) ! Middleware (H ) {
576
582
const arena = self .arena ;
577
583
578
- const node = try arena .create (std . SinglyLinkedList ( Middleware ( H )). Node );
584
+ const node = try arena .create (MiddlewareItem );
579
585
errdefer arena .destroy (node );
580
586
581
587
const m = try arena .create (M );
@@ -590,8 +596,8 @@ pub fn Server(comptime H: type) type {
590
596
}
591
597
592
598
const iface = Middleware (H ).init (m );
593
- node .data = iface ;
594
- self ._middleware_registry .prepend (node );
599
+ node .* . middleware = iface ;
600
+ self ._middleware_registry .prepend (& node . node );
595
601
596
602
return iface ;
597
603
}
0 commit comments