@@ -331,12 +331,11 @@ ssize_t lwan_h2_huffman_next(struct lwan_h2_huffman_decoder *huff)
331
331
struct uint8_ring_buffer * buffer = & huff -> buffer ;
332
332
333
333
while (reader -> total_bitcount > 7 ) {
334
- if (uint8_ring_buffer_full (buffer ))
335
- goto done ;
336
-
337
334
uint8_t peeked_byte = peek_byte (reader );
338
335
if (LIKELY (level0 [peeked_byte ].num_bits )) {
339
- uint8_ring_buffer_put_copy (buffer , level0 [peeked_byte ].symbol );
336
+ if (!uint8_ring_buffer_try_put_copy (buffer ,
337
+ level0 [peeked_byte ].symbol ))
338
+ goto done ;
340
339
consume (reader , level0 [peeked_byte ].num_bits );
341
340
assert (reader -> total_bitcount >= 0 );
342
341
continue ;
@@ -348,7 +347,9 @@ ssize_t lwan_h2_huffman_next(struct lwan_h2_huffman_decoder *huff)
348
347
const struct h2_huffman_code * level1 = next_level0 (peeked_byte );
349
348
peeked_byte = peek_byte (reader );
350
349
if (level1 [peeked_byte ].num_bits ) {
351
- uint8_ring_buffer_put_copy (buffer , level1 [peeked_byte ].symbol );
350
+ if (!uint8_ring_buffer_try_put_copy (buffer ,
351
+ level1 [peeked_byte ].symbol ))
352
+ goto done ;
352
353
if (!consume (reader , level1 [peeked_byte ].num_bits ))
353
354
return -1 ;
354
355
continue ;
@@ -360,7 +361,9 @@ ssize_t lwan_h2_huffman_next(struct lwan_h2_huffman_decoder *huff)
360
361
const struct h2_huffman_code * level2 = next_level1 (peeked_byte );
361
362
peeked_byte = peek_byte (reader );
362
363
if (level2 [peeked_byte ].num_bits ) {
363
- uint8_ring_buffer_put_copy (buffer , level2 [peeked_byte ].symbol );
364
+ if (!uint8_ring_buffer_try_put_copy (buffer ,
365
+ level2 [peeked_byte ].symbol ))
366
+ goto done ;
364
367
if (!consume (reader , level2 [peeked_byte ].num_bits ))
365
368
return -1 ;
366
369
continue ;
@@ -377,7 +380,9 @@ ssize_t lwan_h2_huffman_next(struct lwan_h2_huffman_decoder *huff)
377
380
goto done ;
378
381
}
379
382
if (LIKELY (level3 [peeked_byte ].num_bits )) {
380
- uint8_ring_buffer_put_copy (buffer , level3 [peeked_byte ].symbol );
383
+ if (!uint8_ring_buffer_try_put_copy (buffer ,
384
+ level3 [peeked_byte ].symbol ))
385
+ goto done ;
381
386
if (!consume (reader , level3 [peeked_byte ].num_bits ))
382
387
return -1 ;
383
388
continue ;
@@ -398,7 +403,7 @@ ssize_t lwan_h2_huffman_next(struct lwan_h2_huffman_decoder *huff)
398
403
goto done ;
399
404
400
405
if (level0 [peeked_byte ].num_bits == (int8_t )reader -> total_bitcount ) {
401
- uint8_ring_buffer_put_copy (buffer , level0 [peeked_byte ].symbol );
406
+ uint8_ring_buffer_try_put_copy (buffer , level0 [peeked_byte ].symbol );
402
407
goto done ;
403
408
}
404
409
0 commit comments