Serverabsturz durch Variable in XML Script Topic is solved

peter&basti
Moderator
Posts: 6565
Joined: 09.01.2012, 22:09
Location: Vienna, Austria

Serverabsturz durch Variable in XML Script

Post by peter&basti » 10.06.2019, 11:52

Hallo Freunde,

wir haben bei Jürgen gerade ein Problem entdeckt: Scriptvariable führen bei Mehrfachverwendung zu einem Serverabsturz.
Siehe diesen Thread: viewtopic.php?f=45&t=17951

Auslöser war offenbar eines meiner Signalscripte, ich verwende jedoch immer die %callerid% im Variablennamen um eine Mehrfachverwendung ein und derselben Variable auszuschließen.

Code: Select all

<vr id="Main_%callerid%" text="A_@Ziel" tokeniser="_"/>
- Mich würde nun interessieren und hier auch thematisieren, in welcher Konstellation bei Jürgen der Absturz "programmiert" wurde
- Und hier eine Anleitung generieren, die dies zuverlässig vermeidet

jpultar
Posts: 867
Joined: 23.04.2017, 14:33

Re: Serverabsturz durch Variable in XML Script

Post by jpultar » 10.06.2019, 12:06

Hallo Peter,

deine Scripte funktionieren wunderbar. Der Fehler lag beim Anwender.

Da ich den zweiten Block reserviere, muss ich im Bahnhof abhängig ob dort gehalten wird oder nicht, das Vorsignal Script bei der Einfahrt Straße und bei der Ausfahrt Straße nutzen. Darum habe ich es kopiert und den Namen leicht geändert. Jetzt ruft die gleiche callerid in bestimmten Konstellation beide Scripts auf. Aber ich habe in den beiden Scripts die gleichen Variablen mit der %callerid% Erweiterung benutzt. Und genau diese dann ja nun völlig identischen Variablennamen in zwei Scripts, die gleichzeitig aufgerufen werden, erzeugen den Crash.

Also mein Fehler weil nicht bis zu Ende gedacht.

peter&basti
Moderator
Posts: 6565
Joined: 09.01.2012, 22:09
Location: Vienna, Austria

Re: Serverabsturz durch Variable in XML Script

Post by peter&basti » 10.06.2019, 12:58

Hallo Jürgen,

ich habe gerade in einem Schnipsel von Rob gesehen:

Code: Select all

<query vr="Ziel" table="stlist" id="%callerid%" get="bkb"/>
Die vr heißt fix "Ziel", wenn dieses Script an 2 Stellen aufgerufen wird, dann ist es klar das es nicht funktionieren kann :wink:

Wenn die vr "Ziel_%callerid%" heißen würde, dann kannst Du das gleiche Script beliebig oft an unterschiedlichen Stellen einsetzen, die Variablen haben dann unterschiedliche Namen ("Ziel" in Kombination mit dem aufrufenden Objekt)

Ich verstehe jetzt noch nicht ganz Deinen Input gerade eben. So wie Du es beschreibst, wird das gleiche Script zweimal von gleichen Objekt aufgerufen?

rjversluis
Site Admin
Posts: 41652
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Serverabsturz durch Variable in XML Script

Post by rjversluis » 10.06.2019, 13:07

Hallo,

Wiki Ergänzung:
https://wiki.rocrail.net/doku.php?id=xm ... en#warning
Ich verstehe jetzt noch nicht ganz Deinen Input gerade eben. So wie Du es beschreibst, wird das gleiche Script zweimal von gleichen Objekt aufgerufen?
Stimmt so nicht, weil es wird von mehrere verschiedene Lok Objekte aufgerufen, je nach dem wo sich die Loks gerade befinden.
Also, Finger weg vom XMLScript wenn man kein Ahnung von programmieren hat.

jpultar
Posts: 867
Joined: 23.04.2017, 14:33

Re: Serverabsturz durch Variable in XML Script

Post by jpultar » 10.06.2019, 13:22

Hallo Peter,

ich bin gerade unterwegs und tippe nur am Handy.
Am Abend bin ich zu Hause, da kann ich das präziser beschreiben.

Da die Scripts zwar unterschiedliche Namen haben, inhaltlich ja aber nur copy/paste sind und von der gleichen callerid aufgerufen werden gibt es Kuddelmuddel. Ich habe jetzt einfach in einem Script die Variablen analog zum geänderten Namen geändert und alles ist gut.

Schorse
Posts: 5214
Joined: 12.09.2008, 19:38
Location: D - Niedersachsen

Re: Serverabsturz durch Variable in XML Script

Post by Schorse » 10.06.2019, 15:22

Hallo Jürgen,

Du solltest etwas umsichtiger sein beim schreiben der xml-Scripte. Es ist ja nicht das erste mal das Du was kaputt machst...

jpultar
Posts: 867
Joined: 23.04.2017, 14:33

Re: Serverabsturz durch Variable in XML Script

Post by jpultar » 10.06.2019, 17:42

Hallo Rob,
Hallo Peter,

ihr beiden habt natürlich recht mit euren Aussagen.
Die vr heißt fix "Ziel", wenn dieses Script an 2 Stellen aufgerufen wird, dann ist es klar das es nicht funktionieren kann

Wenn die vr "Ziel_%callerid%" heißen würde, dann kannst Du das gleiche Script beliebig oft an unterschiedlichen Stellen einsetzen, die Variablen haben dann unterschiedliche Namen ("Ziel" in Kombination mit dem aufrufenden Objekt)
Das verursacht definitiv ein Problem und wurde von mir nicht beachtet bei der Verwendung des Scriptes von Peter.
Ich bin jedoch nach wie vor der Meinung, dass die Verantwortung der Nutzung eines zur Verfügung gestellten Scriptes immer beim Anwender selbst liegt,
der Nutzer muss prüfen, ob es auf seiner Anlage so passt oder nicht - das war bei mit nicht der Fall, da wie Rob richtig sagt das Script von mehreren Objekten aufgerufen wird.

@Peter,

bei mir kam folgendes hinzu - ich nutze grundsätzlich 2.Block reservieren (aber nicht bei warten).

Zug fährt von BF26 durch BF04 nach BF62 (Güterzug muss nicht warten).
Bahnhof.PNG
Jetzt zieht erst erstmals Script "Set_Vorsignal" zur richtigen Vor-Signalisierung des Ausfahrtsignals N4 am Einfahrtsignal A ==> Vorsignal am Mast zeigt noch ROT
Dann wird aber durch 2.Block reservieren die nächste FS schon geschaltet [BF04-]-[BF62+]
Der Zug hat aber das Einfahrtsignal noch nicht passiert und somit muss das neue Signalbild der Ausfahrt aus BF04 signalisiert werden.

Jetzt zieht zum zweiten mal Script "Set_Vorsignal" zur richtigen Vor-Signalisierung des Ausfahrtsignals N4 am Einfahrtsignal A ==> Vorsignal am Mast zeigt nun GRÜN

Gleichzeitig zieht aber auch Script "Set_Vorsignal_A" zur richtigen Vor-Signalisierung des nächsten Streckenblocks BF62 am Mast von Ausfahrtsignal N4.
Strasse_Ausfahrt.PNG

In diesem Fall werden also von der FS [BF04-]-[BF62+] gleichzeitig zwei Scripts gestartet die inhaltlich völlig gleich aussehen (weil per copy/paste nur gecloned) und die gleiche %callerid% haben.
Das kann nach meinem Verständnis nicht richtig sein und war ein weiterer Fehler meinerseits. Das habe ich geändert und die Variablen an dieser Stelle

Code: Select all

<vr id="Check%callerid%" text="%desc%"/>
<vr id="Aus%callerid%" text="@@0Check%callerid%"/>
<vr id="Ein%callerid%" text="@@1Check%callerid%"/>
im Script "Set_Vorsignal_A" abgeändert.

Code: Select all

<vr id="Check_A%callerid%" text="%desc%"/>
<vr id="Aus_A%callerid%" text="@@0Check_A%callerid%"/>
<vr id="Ein_A%callerid%" text="@@1Check_A%callerid%"/>
@Gerd,

ich kann mit Kritik - auch so wie Rob sie zurecht anbringt - sehr gut leben und möchte durch meine Fehler und eure Hilfe immer weiter dazu lernen.

Das jedoch
Es ist ja nicht das erste mal das Du was kaputt machst...
ist völlig daneben. Ich weiß nicht, ob du dabei Genugtuung oder Schadenfreude empfindest, ich persönlich finde es völlig unangemessen und anmaßend.

Ich möchte mich an der Stelle bei allen bedanken, die mit mir Geduld hatten und mich wieder auf das richtige Gleis gesetzt haben.

rjversluis
Site Admin
Posts: 41652
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Serverabsturz durch Variable in XML Script

Post by rjversluis » 10.06.2019, 18:23

Hallo Jürgen,
Das jedoch
Es ist ja nicht das erste mal das Du was kaputt machst...
ist völlig daneben. Ich weiß nicht, ob du dabei Genugtuung oder Schadenfreude empfindest, ich persönlich finde es völlig unangemessen und anmaßend.
das stimme ich dir 100% zu; Voll daneben und unbegründet.
Aus meiner Sicht kann ich dir nur loben das du so lange die Sache nach gegangen bist, bis du es fest nageln konnte. :) :thumb_up: :thumb_up: :thumb_up:

jpultar
Posts: 867
Joined: 23.04.2017, 14:33

Re: Serverabsturz durch Variable in XML Script

Post by jpultar » 10.06.2019, 18:35

Hallo Rob,
Aus meiner Sicht kann ich dir nur loben das du so lange die Sache nach gegangen bist, bis du es fest nageln konnte.
So verstehe ich ein Forum - ich kann mich da ja nicht rausnehmen, zurücklehnen und hoffen, dass andere mein Problem lösen.
Und ganz nebenbei lernt man dabei extrem viel dazu und macht zumindest diese Fehler nicht wieder.
Andere Fehler werden sicher nicht ausbleiben, wenn man Spaß daran hat, aktiv mit der Software und deren Möglichkeiten zu arbeiten.

Und bitte gerne auch der Hinweis, wenn es für bestimmte Sonderlocken hier keinen Support gibt :wink:

smitt48
Moderator
Posts: 5983
Joined: 04.04.2014, 01:07
Location: Kralendijk, Bonaire - Dutch Caribbean

Re: Serverabsturz durch Variable in XML Script

Post by smitt48 » 10.06.2019, 18:40

Hi Juergen,
dass andere mein Problem lösen
Ich teste immer ohne Aktionen, daher habe ich nie etwas gefunden!

mfg Tom

peter&basti
Moderator
Posts: 6565
Joined: 09.01.2012, 22:09
Location: Vienna, Austria

Re: Serverabsturz durch Variable in XML Script

Post by peter&basti » 10.06.2019, 20:39

Hallo Freunde,

ich denke damit ist dieses Problem hinreichend erläutert und ich schließe diesen Thread als Lösung.

rjversluis
Site Admin
Posts: 41652
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Serverabsturz durch Variable in XML Script

Post by rjversluis » 11.06.2019, 06:40

Moin,

um Variablen schützen zu können müssen diese mit ein Semaphore erweitert werden, also dann kann nur ein Thread gleichzeitig was ändern.
Aber ohne Crash bleibt dann der Variable Wert in den andere Threads unerwartet.
Mit Semaphore kann ein Exception generiert werden wenn der Variable schon im Zugriff ist, und eventuell Aktionsverarbeitung ausschalten.

rjversluis
Site Admin
Posts: 41652
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Serverabsturz durch Variable in XML Script

Post by rjversluis » 11.06.2019, 06:53

Moin,

och, das gibt es alles schon. Nur habe ich beim Query vergessen es auf zu rufen...
Also, ab Morgen ist XMLScript wieder ein wenig sicherer geworden.

hermannk
Moderator
Posts: 1041
Joined: 06.07.2014, 12:32
Location: Kiel Germany

Re: Serverabsturz durch Variable in XML Script

Post by hermannk » 11.06.2019, 06:54

Moin Rob,
rjversluis wrote:
11.06.2019, 06:40
um Variablen schützen zu können müssen diese mit ein Semaphore erweitert werden, also dann kann nur ein Thread gleichzeitig was ändern.
a) ich halte den Aufwand für unnötig; der Aufruf eines Scripts von zwei unterschiedlichen Aufrufern (%callerid%) ist jetzt gut gelöst;
b) ein Script von einem Aufrufer zweimal gleichzeitig aufrufen zu lassen, kann durch Duplizieren des Scripts umgangen werden;
c) das bisherige zeitliche Verhalten von Script-Abläufen würde geändert; damit wären alle Script-Anwender (evtl. negativ) betroffen.
Ich wünsche mit, daß bitte alles so bleibt, wie es ist.
Gruß
Hermann

hermannk
Moderator
Posts: 1041
Joined: 06.07.2014, 12:32
Location: Kiel Germany

Re: Serverabsturz durch Variable in XML Script

Post by hermannk » 11.06.2019, 07:03

Moin Rob,
rjversluis wrote:
11.06.2019, 06:53
och, das gibt es alles schon. Nur habe ich beim Query vergessen es auf zu rufen...
Also, ab Morgen ist XMLScript wieder ein wenig sicherer geworden.
bisher war nur ein Anwender negativ betroffen und der konnte durch Duplizieren des Scripts sein Problem lösen.
Wie lange sollen wir testen, um sicher sagen zu können:
- alle Script-Anwendungen laufen jetzt mit der Semaphor-Implementierung wie vorher auch?
Dass du es seinerzeit nicht mit aufgerufen hast, hatte sicher seinen Grund.
Ich wünsche mir wirklich, dass es nicht angewendet wird.
Gruß
Hermann

Post Reply

Return to “XMLScripting & Aktionen (DE)”