Commit a6239ea
authored
fix: Error retrieval safeguards for recycled objects (#4239)
The recent switch from boost thread_specific_ptr left a bug: if an
ImageInput (say) is deleted without the caller clearing its error state,
and then later another ImageInput is allocated and happens to get the
same address as the first one, it can "inherit" the unretrieved error
state left behind by the other.
Fix by using a unique ID (initialized by an incrementing atomic
counter) to index the object in the per-thread error store.
I feel like we still don't have a foolproof replacement for the really
nice lifetime management that thread_specific_ptr was doing for us. One
could argue that unretrieved errors in an object are a "bug" in the
user's program, but unretrieved bugs currently just accumulate in the
map, even after the ImageInput is destroyed, until the thread terminates.
---------
Signed-off-by: Larry Gritz <lg@larrygritz.com>1 parent 1c81e49 commit a6239ea
File tree
5 files changed
+46
-31
lines changed- src
- libOpenImageIO
- libtexture
5 files changed
+46
-31
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
31 | | - | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
35 | 41 | | |
36 | 42 | | |
| 43 | + | |
37 | 44 | | |
38 | 45 | | |
39 | 46 | | |
| |||
86 | 93 | | |
87 | 94 | | |
88 | 95 | | |
89 | | - | |
| 96 | + | |
90 | 97 | | |
91 | 98 | | |
92 | 99 | | |
| |||
1096 | 1103 | | |
1097 | 1104 | | |
1098 | 1105 | | |
1099 | | - | |
| 1106 | + | |
1100 | 1107 | | |
1101 | 1108 | | |
1102 | 1109 | | |
| |||
1112 | 1119 | | |
1113 | 1120 | | |
1114 | 1121 | | |
1115 | | - | |
| 1122 | + | |
1116 | 1123 | | |
1117 | 1124 | | |
1118 | 1125 | | |
| |||
1124 | 1131 | | |
1125 | 1132 | | |
1126 | 1133 | | |
1127 | | - | |
| 1134 | + | |
1128 | 1135 | | |
1129 | 1136 | | |
1130 | 1137 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
34 | | - | |
| 33 | + | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
39 | 44 | | |
40 | 45 | | |
41 | 46 | | |
42 | 47 | | |
| 48 | + | |
43 | 49 | | |
44 | 50 | | |
45 | 51 | | |
| |||
269 | 275 | | |
270 | 276 | | |
271 | 277 | | |
272 | | - | |
| 278 | + | |
273 | 279 | | |
274 | 280 | | |
275 | 281 | | |
| |||
698 | 704 | | |
699 | 705 | | |
700 | 706 | | |
701 | | - | |
| 707 | + | |
702 | 708 | | |
703 | 709 | | |
704 | 710 | | |
| |||
710 | 716 | | |
711 | 717 | | |
712 | 718 | | |
713 | | - | |
| 719 | + | |
714 | 720 | | |
715 | 721 | | |
716 | 722 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| 52 | + | |
52 | 53 | | |
53 | 54 | | |
54 | 55 | | |
| |||
65 | 66 | | |
66 | 67 | | |
67 | 68 | | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | 69 | | |
72 | | - | |
| 70 | + | |
73 | 71 | | |
74 | 72 | | |
75 | 73 | | |
| |||
1657 | 1655 | | |
1658 | 1656 | | |
1659 | 1657 | | |
1660 | | - | |
| 1658 | + | |
1661 | 1659 | | |
1662 | 1660 | | |
1663 | 1661 | | |
| |||
1725 | 1723 | | |
1726 | 1724 | | |
1727 | 1725 | | |
1728 | | - | |
| 1726 | + | |
1729 | 1727 | | |
1730 | 1728 | | |
1731 | 1729 | | |
| |||
2735 | 2733 | | |
2736 | 2734 | | |
2737 | 2735 | | |
2738 | | - | |
| 2736 | + | |
2739 | 2737 | | |
2740 | 2738 | | |
2741 | 2739 | | |
| |||
2763 | 2761 | | |
2764 | 2762 | | |
2765 | 2763 | | |
2766 | | - | |
| 2764 | + | |
2767 | 2765 | | |
2768 | 2766 | | |
2769 | 2767 | | |
| |||
3878 | 3876 | | |
3879 | 3877 | | |
3880 | 3878 | | |
3881 | | - | |
| 3879 | + | |
3882 | 3880 | | |
3883 | 3881 | | |
3884 | 3882 | | |
| |||
3890 | 3888 | | |
3891 | 3889 | | |
3892 | 3890 | | |
3893 | | - | |
| 3891 | + | |
3894 | 3892 | | |
3895 | 3893 | | |
3896 | 3894 | | |
| |||
3906 | 3904 | | |
3907 | 3905 | | |
3908 | 3906 | | |
3909 | | - | |
| 3907 | + | |
3910 | 3908 | | |
3911 | 3909 | | |
3912 | 3910 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
551 | 551 | | |
552 | 552 | | |
553 | 553 | | |
554 | | - | |
555 | | - | |
556 | | - | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
557 | 558 | | |
558 | 559 | | |
559 | 560 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
56 | 59 | | |
57 | 60 | | |
58 | 61 | | |
| |||
323 | 326 | | |
324 | 327 | | |
325 | 328 | | |
| 329 | + | |
326 | 330 | | |
327 | 331 | | |
328 | 332 | | |
| |||
358 | 362 | | |
359 | 363 | | |
360 | 364 | | |
361 | | - | |
| 365 | + | |
362 | 366 | | |
363 | 367 | | |
364 | 368 | | |
| |||
900 | 904 | | |
901 | 905 | | |
902 | 906 | | |
903 | | - | |
904 | | - | |
| 907 | + | |
905 | 908 | | |
906 | 909 | | |
907 | 910 | | |
908 | 911 | | |
909 | | - | |
| 912 | + | |
910 | 913 | | |
911 | 914 | | |
912 | 915 | | |
| |||
918 | 921 | | |
919 | 922 | | |
920 | 923 | | |
921 | | - | |
| 924 | + | |
922 | 925 | | |
923 | 926 | | |
924 | 927 | | |
| |||
934 | 937 | | |
935 | 938 | | |
936 | 939 | | |
937 | | - | |
| 940 | + | |
938 | 941 | | |
939 | 942 | | |
940 | 943 | | |
| |||
0 commit comments