Andreas Gehrs-Pahl
8. Juli 2017
public.xbase++.generic
Re: TokenInit() TokenNext() ToeknEnd()
...
The same is true for DataObjects(), which should be using Synch Methods, as
accessing complex iVars, like Arrays or Objects -- or executing user-defined
Methods -- from multiple threads can create runtime errors or program hang-
ups, besides inconsistent data.
DataObjects() not Thread-safe !?
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
DataObjects() not Thread-safe !?
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Warum zitierst Du diesen Beitrag?
Und was soll die Frage im Titel? Im Beitrag wird doch explizit gesagt, dass man auch für Data Objects Sync-Methoden definieren kann, oder?
Uli
Und was soll die Frage im Titel? Im Beitrag wird doch explizit gesagt, dass man auch für Data Objects Sync-Methoden definieren kann, oder?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
dass die nicht threadsave sind ist eine wichtige Aussage, ich hätte damit nicht gerechnet (dass die das nicht sind) ... local ist local !
die sync method wird sich eher auf die aufrufende Methode beziehen, ein dataobjekt hat ja keine Mehtoden. (oder ?)
die sync method wird sich eher auf die aufrufende Methode beziehen, ein dataobjekt hat ja keine Mehtoden. (oder ?)
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Ich verwende eine Public-Variable mit einem DataObject zum Ablegen von Handles und Zusänden in einem WebProgramm.
Dabei habe ich mich schon einige male gewundert wieso das Object zum Teil den Inhalt verloren hat ...
Gruss Carlo
Dabei habe ich mich schon einige male gewundert wieso das Object zum Teil den Inhalt verloren hat ...
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Public Variablen sind natürlich nicht Thread Save!
Das hat nichts mit DataObjects zu tun.
Das hat nichts mit DataObjects zu tun.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Uli
Das DataObject muss ja wohin. Wohin würdest du es (das DataObject) den tun damit es Thread-Save ist????
Gruss Carlo
Das DataObject muss ja wohin. Wohin würdest du es (das DataObject) den tun damit es Thread-Save ist????
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Hallo Carlo,
wenn ich dich richtig verstehe möchtest Du auf eine DataObject-Instanz von verschiedenen Threads aus zugreifen (schreibend und lesend). Dann mußt Du garantieren, dass dies "Thread safe" geschieht. Und das geschieht mit den Sync-Methoden. Ich kann das leider nicht so aus dem Ärmel schütteln aber da müsste man sich einarbeiten.
Uli
wenn ich dich richtig verstehe möchtest Du auf eine DataObject-Instanz von verschiedenen Threads aus zugreifen (schreibend und lesend). Dann mußt Du garantieren, dass dies "Thread safe" geschieht. Und das geschieht mit den Sync-Methoden. Ich kann das leider nicht so aus dem Ärmel schütteln aber da müsste man sich einarbeiten.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Uli
eine Synch Methode ist bei meinem HTTP Handler (xb2net) nicht vorgesehen und vermutlich auch gar nicht umsetztbar. Ich suche einen anderen Weg ... Schade dass das DataObject nicht Threadsave ist.
Gruss Carlo
eine Synch Methode ist bei meinem HTTP Handler (xb2net) nicht vorgesehen und vermutlich auch gar nicht umsetztbar. Ich suche einen anderen Weg ... Schade dass das DataObject nicht Threadsave ist.
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Hallo Carlo,
was spricht denn dagegen statt des DataObject eine Klasse zu verwenden?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Uli
Gruss Carlo
Da bist du ja wieder genau am selben Ort. Der HTTP Handler ist bereits eine Klasse die für jede Web-Anfrage einen Thread aus einem Threadpool mit dem Programmcode startet. Um nicht jedesmal z.B. einen neuen L&L Job zu öffnen muss ich die verschiedenen Handles zur wiederverwendung irgendwo speichern. Vorher hab ich diese in eine DBF geschrieben, jeder Thread hat ja eine eindeutige Nummer das hat gut funktioniert. Aus verschiedenen Gründen wollte ich diese Angaben im Arbeitsspeicher vorhalten. Ich gehe nun zurück zu alten Fassung.was spricht denn dagegen statt des DataObject eine Klasse zu verwenden?
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Mehrere Threads auf eine L&L Instanz, was soll das bringen außer Mischmasch ?
Ich käme nie auf die Idee eine andere Variablenart als LOCAL zu nutzen, außer es ist readonly z.B. Fixe Werte (dann Public)
Ich käme nie auf die Idee eine andere Variablenart als LOCAL zu nutzen, außer es ist readonly z.B. Fixe Werte (dann Public)
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Ich misch mich da mal quer ein. Ich selber benutze ja auch stapelweise DataObjects. Und hatte damit auch bislang noch nie Probleme - auch nicht in Thread-Anwendungen. Aber klar, bei mir sind die halt alle LOCAL.
Ich kann mir aber irgendwie nicht vorstellen, das Alaska eine für die so wichtige Klasse schreibt und dabei nicht auf Thread-Sicherheit achtet. Seid Ihr sicher, das daran liegt, und nicht an irgendwelchen anderen Dingen?
Ansonsten wäre das doch mal eine Frage an Alaska wert, oder?
Jan
Ich kann mir aber irgendwie nicht vorstellen, das Alaska eine für die so wichtige Klasse schreibt und dabei nicht auf Thread-Sicherheit achtet. Seid Ihr sicher, das daran liegt, und nicht an irgendwelchen anderen Dingen?
Ansonsten wäre das doch mal eine Frage an Alaska wert, oder?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Hubert
L&L war nicht das optimale Beispiel, die erwähnten Thread' müssen immer etwa die gleichen Arbeiten ausführen, da die Thread in einem Pool sind, d.h. beendete Thread auf die erneute Verwendung warten können die Verarbeitungshandles auf die verschiedenen DLL's "aufbewahrt" werden und nicht jedesmal einen neuen Handle anzufordern. Da es bei einigen DLL's zu Sorgen durch dauerndes öffnen/schliessen kam entstand diese Lösung. Bei L&L einigen anderen war es einmal oder ist es sehr wichtig nicht alle Jobs zu schliessen sondern mindestens einen stehen zu lassen.
Gruss Carlo
L&L war nicht das optimale Beispiel, die erwähnten Thread' müssen immer etwa die gleichen Arbeiten ausführen, da die Thread in einem Pool sind, d.h. beendete Thread auf die erneute Verwendung warten können die Verarbeitungshandles auf die verschiedenen DLL's "aufbewahrt" werden und nicht jedesmal einen neuen Handle anzufordern. Da es bei einigen DLL's zu Sorgen durch dauerndes öffnen/schliessen kam entstand diese Lösung. Bei L&L einigen anderen war es einmal oder ist es sehr wichtig nicht alle Jobs zu schliessen sondern mindestens einen stehen zu lassen.
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Jan
Nein, sicher bin ich mir nicht.
Es ist mir beim Testen aufgefallen dass mein DataObject ab und zu den Inhalt verlor.
Keine Ahnung wieso. Ich habe die spezielle Verwendung des Data-Objects aufgegeben und verwende wieder eine DBF.
Dies deshalb da der Cargo-Slot bereits verwendet ist. Änderungen daran würden einen Umfangreichen Test der gesamten Web-App bedeuten, was ich montan nicht möchte.
Gruss Carlo
Nein, sicher bin ich mir nicht.
Es ist mir beim Testen aufgefallen dass mein DataObject ab und zu den Inhalt verlor.
Keine Ahnung wieso. Ich habe die spezielle Verwendung des Data-Objects aufgegeben und verwende wieder eine DBF.
Dies deshalb da der Cargo-Slot bereits verwendet ist. Änderungen daran würden einen Umfangreichen Test der gesamten Web-App bedeuten, was ich montan nicht möchte.
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: DataObjects() not Thread-safe !?
kannst ja im Alaska Forum unter dem o.g. Thread nachfragen "was" AGP mit seiner Antwort meint.
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Frank hat in der betreffenden Diskussion auf Andreas geantwortet und bestätigt, das die DataObjects grundsätzlich erst einmal thread safe seien.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Ich habe rausgefunden wann es mir das DatObject zerschiesst. Der Ablauf ist etwa so: DataObject in einer Public Var anlegen. Xbase-DLL laden, der Code in dieser DLL nutzt das DataObject (fügt) neue Vars ein, dann DLL entladen dann ist oft auch das Dataobject zerstört.
Gruss Carlo
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
wie und warum wird die DLL entladen ?
Bei QuickPDF habe ich die Erfahrung gemacht, dass DLLUNLOAD() den dortigen internen Speicher nicht sauber freigibt und die Anwendung Speicher frisst.
Lasse ich das weg, wird keiner gefressen ... auch nach 10.000 PDFs bleibt der Verbrauch konstant (neues PDF etwas mehr ... nach schließen des PDF wieder alter Wert).
Nach Ende der EXE ist alles aus dem Speicher.
Bei QuickPDF habe ich die Erfahrung gemacht, dass DLLUNLOAD() den dortigen internen Speicher nicht sauber freigibt und die Anwendung Speicher frisst.
Lasse ich das weg, wird keiner gefressen ... auch nach 10.000 PDFs bleibt der Verbrauch konstant (neues PDF etwas mehr ... nach schließen des PDF wieder alter Wert).
Nach Ende der EXE ist alles aus dem Speicher.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Hubert
das Laden und Entladen von in Xbase geschriebenem Code ist Teil des Entwicklungs und Test Konzeptes von xb2net für Web-App's. Dies vereinfacht die Entwicklung und Test ganz extrem. Du kannst etwas in der PRG Datei ändern und im Browser Reload drücken dann wird der Code automatisch neu kompiliert und die alte DLL entladen und die mit dem neuen geänderten Code geladen. Mal so einfach gesagt. In der definitven Version werden die DLL's statisch geladen oder der Code direkt an die EXE gelinkt.
Gruss Carlo
das Laden und Entladen von in Xbase geschriebenem Code ist Teil des Entwicklungs und Test Konzeptes von xb2net für Web-App's. Dies vereinfacht die Entwicklung und Test ganz extrem. Du kannst etwas in der PRG Datei ändern und im Browser Reload drücken dann wird der Code automatisch neu kompiliert und die alte DLL entladen und die mit dem neuen geänderten Code geladen. Mal so einfach gesagt. In der definitven Version werden die DLL's statisch geladen oder der Code direkt an die EXE gelinkt.
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Frank Grossheinrich
- Rekursionen-Architekt
- Beiträge: 147
- Registriert: Fr, 31. Mär 2017 15:06
- Wohnort: Eschborn
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 82 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Ich habe die ein oder andere Frage:ramses hat geschrieben: ↑Fr, 14. Jul 2017 10:02 Ich habe rausgefunden wann es mir das DatObject zerschiesst. Der Ablauf ist etwa so: DataObject in einer Public Var anlegen. Xbase-DLL laden, der Code in dieser DLL nutzt das DataObject (fügt) neue Vars ein, dann DLL entladen dann ist oft auch das Dataobject zerstört.
1) werden dann in die iVars auch gleich Werte übertragen?
2) sind diese Werte statische Werte? (also Literale, die statisch im Code stehen)
3) wie ist die DLL gebaut? Was sind die Compiler-Switches und die Link-Switches? (DYNAMIC)
Ich wäre BRENNEND an einem Beispiel interessiert. Bitte an mich oder an unseren Support!
Danke, Frank
We love Xbase++, and you?
- Frank Grossheinrich
- Rekursionen-Architekt
- Beiträge: 147
- Registriert: Fr, 31. Mär 2017 15:06
- Wohnort: Eschborn
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 82 Mal
- Kontaktdaten:
Re: DataObject()s ARE Thread-safe !!!
Bitte stellt doch solche Fragen bei uns in der Newsgroup.
DataObject() sind thread-safe! Wie alles in Xbase++! Wenn dem so nicht ist, dann ist das ein Fehler und muss behoben werden!
Was ist thread-safe? Ich habe den Eindruck, dass ihr den Begriff falsch verwendet. Und sich da etwas Falsches im Kopf manifestiert.
Thread-safe bedeutet, dass ihr eine Variable (DataObject() oder was auch immer) über Threads hinweg lesen und schreiben könnt und euch das Ganze nicht um die Ohren fliegt. Ihr müsst euch nicht darum kümmern, ob gerade 10 Threads gleichzeitig auf einer Variablen "rumnageln". Das nimmt euch die Xbase++ Runtime ab. Aber dass die Variable verändert werden kann und mit welchem Inhalt zu welcher Zeit, dafür seid ihr zuständig. Threads sind auch nicht deterministisch. Wenn die Reihenfolge wichtig ist, wann was abgearbeitet werden soll, dann müsst ihr Vorsorge treffen.
Im Umkehrschluss: thread-safe bedeutet NICHT, dass eine Variable geschützt ist in einem anderen Thread.
Und auch, wenn ich Andreas Gehrs-Pahl sehr schätze, er hat nicht immer recht.
Gruß, Frank
We love Xbase++, and you?
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Frank
zu deinen Fragen:
Das DataObject() wird leer beim Programmstart angelegt und danach in der beschriebenen DLL mit Werten befüllt wenn diese Werte noch nicht vorhanden sind.
Für meine Zwecke erstelle ich nun das DataObject() beim erneuten laden der DLL einfach neu. So ist das Problem während der Entwicklung beseitigt.
Leider kann die News-Gruppe nicht mit einem Browser besucht werden .... deshalb kann ich da nicht mitlesen/schreiben.
Ein extra Programm dazu installieren kommt für mich gar nicht in Frage.... das ist ja wie vor 20 Jahren .....
Gruss Carlo
zu deinen Fragen:
Ja, es sind verschiedene Nummerischen Werte sowie einige Arrays. Es werden alle mit Daten bestückt.1) werden dann in die iVars auch gleich Werte übertragen?
Nein, es sind alles Werte die aus local oder static Vars übertragen werden.2) sind diese Werte statische Werte? (also Literale, die statisch im Code stehen)
XPP %1%2.prg /o%1 /a /m /n /q /v /err:3 /dll:dynamic /link:"/dll /out:%1%2.dll" 2>nul3) wie ist die DLL gebaut? Was sind die Compiler-Switches und die Link-Switches? (DYNAMIC)
Das DataObject() wird leer beim Programmstart angelegt und danach in der beschriebenen DLL mit Werten befüllt wenn diese Werte noch nicht vorhanden sind.
Für meine Zwecke erstelle ich nun das DataObject() beim erneuten laden der DLL einfach neu. So ist das Problem während der Entwicklung beseitigt.
Leider kann die News-Gruppe nicht mit einem Browser besucht werden .... deshalb kann ich da nicht mitlesen/schreiben.
Ein extra Programm dazu installieren kommt für mich gar nicht in Frage.... das ist ja wie vor 20 Jahren .....
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Martin Altmann
- Foren-Administrator
- Beiträge: 16536
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 113 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: DataObjects() not Thread-safe !?
Moin Carlo,
Viele Grüße,
Martin
http://news.alaska-software.com/ramses hat geschrieben:Leider kann die News-Gruppe nicht mit einem Browser besucht werden ....
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: DataObjects() not Thread-safe !?
Hallo Martin
Danke für den Tip.
Hab ich nicht gewusst/versucht. Auf der Alaska Seite steht: "So richten Windows Live / Thunderbird für Newsgruppen ein" ich dachte es sei noch wie früher, es ohne News Reader nicht geht. Aber mir gefällt es hier viel besser....
Gruss Carlo
Danke für den Tip.
Hab ich nicht gewusst/versucht. Auf der Alaska Seite steht: "So richten Windows Live / Thunderbird für Newsgruppen ein" ich dachte es sei noch wie früher, es ohne News Reader nicht geht. Aber mir gefällt es hier viel besser....
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo