Mercurial > hg > nginx
comparison src/event/ngx_event_quic.c @ 8284:2935a11c55b6 quic
Fixed QUIC stream insert and find.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Wed, 25 Mar 2020 14:05:40 +0300 |
parents | 4cf00c14f11a |
children | f85749b60e58 |
comparison
equal
deleted
inserted
replaced
8283:dadbc66e9fca | 8284:2935a11c55b6 |
---|---|
115 | 115 |
116 | 116 |
117 static void ngx_quic_rbtree_insert_stream(ngx_rbtree_node_t *temp, | 117 static void ngx_quic_rbtree_insert_stream(ngx_rbtree_node_t *temp, |
118 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); | 118 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); |
119 static ngx_quic_stream_t *ngx_quic_find_stream(ngx_rbtree_t *rbtree, | 119 static ngx_quic_stream_t *ngx_quic_find_stream(ngx_rbtree_t *rbtree, |
120 ngx_uint_t key); | 120 uint64_t id); |
121 static ngx_quic_stream_t *ngx_quic_create_stream(ngx_connection_t *c, | 121 static ngx_quic_stream_t *ngx_quic_create_stream(ngx_connection_t *c, |
122 uint64_t id, size_t rcvbuf_size); | 122 uint64_t id, size_t rcvbuf_size); |
123 static ssize_t ngx_quic_stream_recv(ngx_connection_t *c, u_char *buf, | 123 static ssize_t ngx_quic_stream_recv(ngx_connection_t *c, u_char *buf, |
124 size_t size); | 124 size_t size); |
125 static ssize_t ngx_quic_stream_send(ngx_connection_t *c, u_char *buf, | 125 static ssize_t ngx_quic_stream_send(ngx_connection_t *c, u_char *buf, |
1445 { | 1445 { |
1446 ngx_rbtree_node_t **p; | 1446 ngx_rbtree_node_t **p; |
1447 ngx_quic_stream_t *qn, *qnt; | 1447 ngx_quic_stream_t *qn, *qnt; |
1448 | 1448 |
1449 for ( ;; ) { | 1449 for ( ;; ) { |
1450 | 1450 qn = (ngx_quic_stream_t *) node; |
1451 if (node->key < temp->key) { | 1451 qnt = (ngx_quic_stream_t *) temp; |
1452 | 1452 |
1453 p = &temp->left; | 1453 p = (qn->id < qnt->id) ? &temp->left : &temp->right; |
1454 | |
1455 } else if (node->key > temp->key) { | |
1456 | |
1457 p = &temp->right; | |
1458 | |
1459 } else { /* node->key == temp->key */ | |
1460 | |
1461 qn = (ngx_quic_stream_t *) &node->color; | |
1462 qnt = (ngx_quic_stream_t *) &temp->color; | |
1463 | |
1464 if (qn->c < qnt->c) { | |
1465 p = &temp->left; | |
1466 } else { | |
1467 p = &temp->right; | |
1468 } | |
1469 } | |
1470 | 1454 |
1471 if (*p == sentinel) { | 1455 if (*p == sentinel) { |
1472 break; | 1456 break; |
1473 } | 1457 } |
1474 | 1458 |
1482 ngx_rbt_red(node); | 1466 ngx_rbt_red(node); |
1483 } | 1467 } |
1484 | 1468 |
1485 | 1469 |
1486 static ngx_quic_stream_t * | 1470 static ngx_quic_stream_t * |
1487 ngx_quic_find_stream(ngx_rbtree_t *rbtree, ngx_uint_t key) | 1471 ngx_quic_find_stream(ngx_rbtree_t *rbtree, uint64_t id) |
1488 { | 1472 { |
1489 ngx_rbtree_node_t *node, *sentinel; | 1473 ngx_rbtree_node_t *node, *sentinel; |
1474 ngx_quic_stream_t *qn; | |
1490 | 1475 |
1491 node = rbtree->root; | 1476 node = rbtree->root; |
1492 sentinel = rbtree->sentinel; | 1477 sentinel = rbtree->sentinel; |
1493 | 1478 |
1494 while (node != sentinel) { | 1479 while (node != sentinel) { |
1495 | 1480 qn = (ngx_quic_stream_t *) node; |
1496 if (key == node->key) { | 1481 |
1497 return (ngx_quic_stream_t *) node; | 1482 if (id == qn->id) { |
1498 } | 1483 return qn; |
1499 | 1484 } |
1500 node = (key < node->key) ? node->left : node->right; | 1485 |
1486 node = (id < qn->id) ? node->left : node->right; | |
1501 } | 1487 } |
1502 | 1488 |
1503 return NULL; | 1489 return NULL; |
1504 } | 1490 } |
1505 | 1491 |