Repository navigation
Commit 92b8bb5
committed
[BUG] Publish the curl session state before the event that reports it
DispatchEvent stored session_state_ after the handler had returned. A handler
that cancels from the first event of a client that is already polling lets the
background thread finish the operation and dispatch a state of its own, so both
threads wrote that member, and the store left until after the handler returned
overwrote the cancel with a state the operation had left. Found by @lalitb in
review.
The store moves ahead of the handler and the member becomes atomic. SessionState
is a uint8_t enum and std::atomic of it is one byte with alignment one, so the
layout of an installed type does not move.
The new case warms the client with a completed request first, because the
background thread is only spawned after SendAsync returns and without one there
is nothing for the event to overlap. It is the only case in this file that
reaches the is_cleaned_ recheck at the end of SendAsync. Its counters are
relaxed deliberately, since an acquire or a release on them gives the two
threads an ordering the code under test does not have and the racing store stops
being reported.
Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>1 parent 8a01384 commit 92b8bb5
4 files changed
Lines changed: 92 additions & 4 deletions
File tree
- ext
- include/opentelemetry/ext/http/client/curl
- src/http/client/curl
- test/http
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
43 | 46 | | |
44 | 47 | | |
45 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
246 | 247 | | |
247 | 248 | | |
248 | 249 | | |
249 | | - | |
| 250 | + | |
250 | 251 | | |
251 | 252 | | |
252 | 253 | | |
| |||
338 | 339 | | |
339 | 340 | | |
340 | 341 | | |
341 | | - | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
342 | 345 | | |
343 | 346 | | |
344 | 347 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
407 | 407 | | |
408 | 408 | | |
409 | 409 | | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
410 | 415 | | |
411 | 416 | | |
412 | 417 | | |
413 | 418 | | |
414 | | - | |
415 | | - | |
416 | 419 | | |
417 | 420 | | |
418 | 421 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
698 | 698 | | |
699 | 699 | | |
700 | 700 | | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
701 | 780 | | |
702 | 781 | | |
703 | 782 | | |
| |||
0 commit comments