Scheduler-test: bugfix - protect further allocation with guard

...whenever the planning falls behind schedule, it can happen that
the planner-worker immediately dispatches its own jobs; while the calculation
is broken anyway in this situation, especially this call scheme leads to
dropping the Grooming-Token prior to the calculation dispatched directly.

Since the dependency relation can only be established after creating
both predecessor and successor schedules, the corresponding allocation
of the NOTIFY-Activity is not protected against concurrent access,
which probably leads to the assertion failure due to corruption of
the allocator's internal data structures...
This commit is contained in:
Fischlurch 2023-12-23 21:36:50 +01:00
parent dedfbf4984
commit 100252acdf
2 changed files with 85 additions and 27 deletions

View file

@ -205,20 +205,8 @@ namespace gear {
/** build Activity chain and hand-over to the Scheduler. */
ScheduleSpec post();
ScheduleSpec
linkToSuccessor (ScheduleSpec& succSpec)
{
term_->appendNotificationTo (*succSpec.term_);
return move(*this);
}
ScheduleSpec
linkToPredecessor (ScheduleSpec& predSpec)
{
predSpec.term_->appendNotificationTo (*term_);
return move(*this);
}
ScheduleSpec linkToSuccessor (ScheduleSpec&);
ScheduleSpec linkToPredecessor(ScheduleSpec&);
};
@ -588,6 +576,23 @@ namespace gear {
return move(*this);
}
inline ScheduleSpec
ScheduleSpec::linkToSuccessor (ScheduleSpec& succSpec)
{ // protect allocation
auto guard = theScheduler_->layer2_.requireGroomingTokenHere();
term_->appendNotificationTo (*succSpec.term_);
return move(*this);
}
inline ScheduleSpec
ScheduleSpec::linkToPredecessor (ScheduleSpec& predSpec)
{ // protect allocation
auto guard = theScheduler_->layer2_.requireGroomingTokenHere();
predSpec.term_->appendNotificationTo (*term_);
return move(*this);
}
/**
* Enqueue for time-bound execution, possibly dispatch immediately.

View file

@ -105715,7 +105715,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
<node COLOR="#435e98" CREATED="1703029832104" ID="ID_592804815" MODIFIED="1703037364626" TEXT="Testl&#xe4;ufe">
<node COLOR="#435e98" CREATED="1703029837383" FOLDED="true" ID="ID_728556946" MODIFIED="1703037346853" TEXT="Groooming-Token durcheinander">
<node COLOR="#435e98" CREATED="1703029837383" FOLDED="true" ID="ID_728556946" MODIFIED="1703362241957" TEXT="Groooming-Token durcheinander">
<linktarget COLOR="#955269" DESTINATION="ID_728556946" ENDARROW="Default" ENDINCLINATION="339;27;" ID="Arrow_ID_1122005137" SOURCE="ID_728405176" STARTARROW="None" STARTINCLINATION="-478;-13;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1703030898754" ID="ID_985851431" MODIFIED="1703032124763" TEXT="generell: durch die letzte &#xc4;nderung haben wir nun MASSIVE contention">
@ -105822,8 +105822,31 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1703200244595" ID="ID_960168734" MODIFIED="1703200289458" TEXT="Problem offensichtlich noch nicht ganz gel&#xf6;st">
<linktarget COLOR="#e52142" DESTINATION="ID_960168734" ENDARROW="Default" ENDINCLINATION="408;21;" ID="Arrow_ID_1198532158" SOURCE="ID_1606924133" STARTARROW="Default" STARTINCLINATION="-380;-216;"/>
<icon BUILTIN="clanbomber"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703200308153" HGAP="42" ID="ID_1359580391" MODIFIED="1703200338745" TEXT="ein komplexer re-entrant Call in den Planungs-Job" VSHIFT="-2">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703200308153" HGAP="42" ID="ID_1359580391" MODIFIED="1703362577284" TEXT="beobachtet unter starkem Scheduling-Druck" VSHIFT="-2">
<icon BUILTIN="clanbomber"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703362266933" ID="ID_1884536172" MODIFIED="1703362287766" TEXT="in der Tat: auch die Dependency-Definition macht noch eine Allokation">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1703362330910" ID="ID_1424201931" MODIFIED="1703362330910">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
...und diese wird im aktuellen Test-Setup nicht von der Grooming-Token-Klammer erfa&#223;t
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#fad2b9" COLOR="#690f14" CREATED="1703362336649" ID="ID_284910644" MODIFIED="1703362643925" TEXT="das ist aber infolge der DSL-Struktur grunds&#xe4;tzlich immer eine latente Gefahr">
<linktarget COLOR="#6b2d3c" DESTINATION="ID_284910644" ENDARROW="Default" ENDINCLINATION="491;18;" ID="Arrow_ID_898309518" SOURCE="ID_1261843352" STARTARROW="Default" STARTINCLINATION="107;-798;"/>
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1703362357543" ID="ID_548286455" MODIFIED="1703362441517" TEXT="wenngliech auch es nur auftritt, wenn das Schedule ohnehin gebrochen ist">
<arrowlink COLOR="#fef8bd" DESTINATION="ID_1851392307" ENDARROW="Default" ENDINCLINATION="59;-99;" ID="Arrow_ID_107435456" STARTARROW="None" STARTINCLINATION="-400;15;"/>
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
@ -106554,7 +106577,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1703126842397" FOLDED="true" ID="ID_1527226217" MODIFIED="1703201482271" TEXT="teste mit l&#xe4;ngerem Node-Graph (128)">
<node COLOR="#338800" CREATED="1703126842397" FOLDED="true" ID="ID_1527226217" MODIFIED="1703362208466" TEXT="teste mit l&#xe4;ngerem Node-Graph (128)">
<icon BUILTIN="button_ok"/>
<node CREATED="1703126876508" ID="ID_1769051451" MODIFIED="1703126906987" TEXT="nicht klar ob der Graph geeignet ist (er ist dann andauernd 16 Nodes breit)"/>
<node COLOR="#435e98" CREATED="1703126908288" FOLDED="true" ID="ID_1243795879" MODIFIED="1703200368271" TEXT="Deadlock">
@ -107116,12 +107139,26 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="forward"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1703361871020" FOLDED="true" ID="ID_1851392307" MODIFIED="1703362439437" TEXT="die Abarbeitung verz&#xf6;gert sich stets bis der Plan bricht...">
<arrowlink COLOR="#68324a" DESTINATION="ID_1696604004" ENDARROW="Default" ENDINCLINATION="-242;0;" ID="Arrow_ID_962189970" STARTARROW="None" STARTINCLINATION="93;34;"/>
<linktarget COLOR="#fef8bd" DESTINATION="ID_1851392307" ENDARROW="Default" ENDINCLINATION="59;-99;" ID="Arrow_ID_107435456" SOURCE="ID_548286455" STARTARROW="None" STARTINCLINATION="-400;15;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1703361917061" ID="ID_410454444" MODIFIED="1703362001086" TEXT="zun&#xe4;chst einmal wird der Planer nicht mehr rechtzeitig fertig"/>
<node CREATED="1703362001626" ID="ID_1758621746" MODIFIED="1703362016009" TEXT="und steigt deshalb rekursiv in seine eigene Continuation ein"/>
<node CREATED="1703362016672" ID="ID_1726359995" MODIFIED="1703362022291" TEXT="das allein w&#xe4;re noch kein Problem"/>
<node CREATED="1703362022857" ID="ID_877239008" MODIFIED="1703362051720" TEXT="aber irgenwann f&#xe4;llt das Continuation-Schedule hinter das aktuelle Backlog"/>
<node CREATED="1703362059323" ID="ID_224714036" MODIFIED="1703362079516" TEXT="und wen die Verz&#xf6;gerungen mal bis auf 10..15ms wachsen"/>
<node COLOR="#5b280f" CREATED="1703362080249" ID="ID_1304525999" MODIFIED="1703362125483" TEXT="dann disponiert der Planer in die Vergangenheit">
<icon BUILTIN="stop-sign"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703192685376" ID="ID_1662036004" MODIFIED="1703193553804" TEXT="sporadische Probleme">
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703192691245" FOLDED="true" ID="ID_1922123761" MODIFIED="1703193684937" TEXT="Hash-Failure: der Planer &#xfc;berf&#xe4;hrt seinen eignen Plan">
<arrowlink COLOR="#dd2b69" DESTINATION="ID_1040196464" ENDARROW="Default" ENDINCLINATION="-497;-1249;" ID="Arrow_ID_1906218569" STARTARROW="None" STARTINCLINATION="-988;51;"/>
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1703193560824" ID="ID_1696604004" MODIFIED="1703193587745" TEXT="dagegen k&#xf6;nnen wir uns auf dieser Ebene nicht wappnen">
<linktarget COLOR="#68324a" DESTINATION="ID_1696604004" ENDARROW="Default" ENDINCLINATION="-242;0;" ID="Arrow_ID_962189970" SOURCE="ID_1851392307" STARTARROW="None" STARTINCLINATION="93;34;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
@ -107144,7 +107181,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702949773611" ID="ID_1539248543" MODIFIED="1703346098120" TEXT="wieder Assertion-Failure aus dem Allokator">
<node COLOR="#435e98" CREATED="1702949773611" ID="ID_1539248543" MODIFIED="1703362946389" TEXT="wieder Assertion-Failure aus dem Allokator">
<linktarget COLOR="#fd1e5d" DESTINATION="ID_1539248543" ENDARROW="Default" ENDINCLINATION="-214;-502;" ID="Arrow_ID_1665215112" SOURCE="ID_1042591319" STARTARROW="None" STARTINCLINATION="417;46;"/>
<linktarget COLOR="#e02174" DESTINATION="ID_1539248543" ENDARROW="Default" ENDINCLINATION="-578;34;" ID="Arrow_ID_250558884" SOURCE="ID_1069075638" STARTARROW="None" STARTINCLINATION="186;12;"/>
<icon BUILTIN="broken-line"/>
@ -108012,6 +108049,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1703350535218" ID="ID_1070838316" MODIFIED="1703354065957" STYLE="fork" TEXT="ScheduleSpec::linkToSuccessor() ist noch nicht gesch&#xfc;tzt">
<arrowlink COLOR="#3f1abf" DESTINATION="ID_1782946591" ENDARROW="Default" ENDINCLINATION="172;-6;" ID="Arrow_ID_67888117" STARTARROW="None" STARTINCLINATION="-516;25;"/>
<linktarget COLOR="#8b5475" DESTINATION="ID_1070838316" ENDARROW="Default" ENDINCLINATION="83;144;" ID="Arrow_ID_999177251" SOURCE="ID_1261843352" STARTARROW="None" STARTINCLINATION="12;-110;"/>
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="broken-line"/>
<node COLOR="#435e98" CREATED="1703350674998" HGAP="10" ID="ID_1066318656" MODIFIED="1703351002992" TEXT="Treffer! Versenkt!" VSHIFT="-14">
@ -108103,6 +108141,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#435e98" CREATED="1703362162770" ID="ID_510180676" MODIFIED="1703362172040" TEXT="Fazit">
<icon BUILTIN="forward"/>
<node CREATED="1703362173152" ID="ID_1455939072" MODIFIED="1703362188293" TEXT="kein neues Problem">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703362177487" ID="ID_1261843352" MODIFIED="1703362733092" TEXT="sondern eine noch nicht geschlossene L&#xfc;cke">
<arrowlink COLOR="#6b2d3c" DESTINATION="ID_284910644" ENDARROW="Default" ENDINCLINATION="491;18;" ID="Arrow_ID_898309518" STARTARROW="Default" STARTINCLINATION="107;-798;"/>
<arrowlink COLOR="#8b5475" DESTINATION="ID_1070838316" ENDARROW="Default" ENDINCLINATION="83;144;" ID="Arrow_ID_999177251" STARTARROW="None" STARTINCLINATION="12;-110;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703351409418" ID="ID_1936410340" MODIFIED="1703353881323" STYLE="fork">
<richcontent TYPE="NODE"><html>
@ -108147,7 +108196,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1703352638457" ID="ID_1942328962" MODIFIED="1703352653564" TEXT="trotzdem h&#xe4;tte das nicht passieren d&#xfc;rfen"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#3f0099" CREATED="1703353017072" ID="ID_1850770118" MODIFIED="1703354053482" TEXT="Logik-Fehler: falsche Bezugs-Node verwendet">
<arrowlink COLOR="#2f28ad" DESTINATION="ID_1815362637" ENDARROW="Default" ENDINCLINATION="205;-5;" ID="Arrow_ID_258584322" STARTARROW="None" STARTINCLINATION="-334;20;"/>
<arrowlink COLOR="#2f28ad" DESTINATION="ID_1815362637" ENDARROW="Default" ENDINCLINATION="106;0;" ID="Arrow_ID_258584322" STARTARROW="None" STARTINCLINATION="-334;20;"/>
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1703353040028" ID="ID_813083541" MODIFIED="1703353822445" TEXT="brauche den Anfang vom Chunk">
<icon BUILTIN="yes"/>
@ -108157,19 +108206,23 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1703363369164" ID="ID_427677972" MODIFIED="1703363376211" TEXT="weiterer Incident beobachtet">
<icon BUILTIN="broken-line"/>
</node>
</node>
<node CREATED="1703353891475" ID="ID_1234547026" MODIFIED="1703353896302" TEXT="Fixes / Verbesserungen">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1703353897930" ID="ID_1782946591" MODIFIED="1703354058778" TEXT="auch Dependency-Planung per Grooming-Token sch&#xfc;tzen">
</node>
<node COLOR="#338800" CREATED="1703353891475" ID="ID_1234547026" MODIFIED="1703362979743" TEXT="Fixes / Verbesserungen">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1703353897930" ID="ID_1782946591" MODIFIED="1703362936222" TEXT="auch Dependency-Planung per Grooming-Token sch&#xfc;tzen">
<linktarget COLOR="#3f1abf" DESTINATION="ID_1782946591" ENDARROW="Default" ENDINCLINATION="172;-6;" ID="Arrow_ID_67888117" SOURCE="ID_1070838316" STARTARROW="None" STARTINCLINATION="-516;25;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node COLOR="#338800" CREATED="1703353913264" ID="ID_1815362637" MODIFIED="1703354053483" TEXT="Chunk-Start-Zeit korrekt (auf Anfang) setzen">
<linktarget COLOR="#2f28ad" DESTINATION="ID_1815362637" ENDARROW="Default" ENDINCLINATION="205;-5;" ID="Arrow_ID_258584322" SOURCE="ID_1850770118" STARTARROW="None" STARTINCLINATION="-334;20;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1703353928974" ID="ID_538772671" MODIFIED="1703353948865" TEXT="auch Planungs Zeit-Schritt konfigurierbar machen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1703353913264" ID="ID_1815362637" MODIFIED="1703362972916" TEXT="Chunk-Start-Zeit korrekt (auf Anfang) setzen">
<linktarget COLOR="#2f28ad" DESTINATION="ID_1815362637" ENDARROW="Default" ENDINCLINATION="106;0;" ID="Arrow_ID_258584322" SOURCE="ID_1850770118" STARTARROW="None" STARTINCLINATION="-334;20;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1703353928974" ID="ID_538772671" MODIFIED="1703361847604" TEXT="auch Planungs Zeit-Schritt konfigurierbar machen">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>