AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EVariantArrayLockedError

Ein Thema von MaBuSE · begonnen am 24. Aug 2004 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

EVariantArrayLockedError

  Alt 24. Aug 2004, 13:22
Hallo,

wir bekommen einen EVariantArrayLockedError in einem unserer Serverprogramme.

Weiß jemand was dieser Fehler bedeutet?
(oder wo ich dazu was nachlesen kann)

Im Google hab ich nix gefunden.

Der Fehler ist in der Unit Variants deklariert und wird in einem Thread geworfen.
Scheint also ein Sync Problem zu sein. Alle relevanten Anweisungen sind aber abgesichert.
Dieser Fehler tritt "leider" nur ca. ein bis zwei mal pro Quartal auf.

Die OH sagt:
EVariantArrayLockedError ist die Exception-Klasse für Fehler, die ausgelöst werden, weil ein Varianten-Array gesperrt oder fest ist.

Unit Variants

Beschreibung
EVariantArrayLockedError wird ausgelöst, wenn eine Operation mit einem Varianten-Array fehlschlägt, weil das Array gesperrt oder fest ist.


[edit]
Der Fehler tritt warscheinlich auf, wenn TClientDataSet.Refresh aufgerufen wird.

Diese Anweisung wird nicht über Synchronize() ausgeführt, sondern es wird ein TMultiReadExclusiveWriteSynchronizer verwendet.

Die liebe OH schreibt
TMultiReadExclusiveWriteSynchronizer dient dem Speicherschutz in einer Multithread-Anwendung.

Unit SysUtils

Beschreibung
Mit TMultiReadExclusiveWriteSynchronizer kann der Zugriff auf den Speicher in einer Multithread-Anwendung überwacht werden. Im Gegensatz zu einem kritischen Abschnitt, der alle anderen Threads am Lesen und Schreiben in den zugeordneten Speicher hindert, ermöglicht es TMultiReadExclusiveWriteSynchronizer, dass mehrere Threads gleichzeitig aus dem geschützten Speicher lesen können. Bei einem Schreibzugriff eines Thread stellt TMultiReadExclusiveWriteSynchronizer sicher, dass der Thread exklusiven Zugriff auf den Speicher hat.

TMultiReadExclusiveWriteSynchronizer kann die Ausführungsgeschwindigkeit von Anwendungen wesentlich verbessern, in denen Threads häufig Lesezugriffe auf ein Objekt oder eine Variable ausführen, aber nur gelegentlich in das Objekt bzw. die Variable schreiben.

Jeder Zugriff auf den geschützten Speicher muss in Aufrufe der Methoden BeginRead und EndRead bzw. BeginWrite und EndWrite eingeschlossen werden. Andernfalls kann es zu Konflikten zwischen den einzelnen Threads kommen.


Ich hoffe es kann mir jemand helfen
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: EVariantArrayLockedError

  Alt 9. Sep 2004, 10:24
Zitat von MaBuSE:
Ich hoffe es kann mir jemand helfen
Ich habe die Hoffnung noch nicht aufgegeben
Leider konnten wir das Problem noch nicht lösen.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: EVariantArrayLockedError

  Alt 6. Okt 2004, 13:20
Zitat von MaBuSE:
Zitat von MaBuSE:
Ich hoffe es kann mir jemand helfen
Ich habe die Hoffnung noch nicht aufgegeben
Leider konnten wir das Problem noch nicht lösen.
Das trifft immer noch zu :-/
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: EVariantArrayLockedError

  Alt 11. Nov 2004, 14:04
*push* Es kann mir doch Keiner erzählen, dass hier in der DP keiner Ahnung von sowas hat.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: EVariantArrayLockedError

  Alt 11. Nov 2004, 14:26
Hi,

ich weiss nicht, ob es Dir hilft, aber du könntest mal Hier im Forum suchenmadexcept installieren, um so eine genau Ablaufverfolgung für den Fehler anstellen zu können.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: EVariantArrayLockedError

  Alt 11. Nov 2004, 15:06
Zitat von mirage228:
ich weiss nicht, ob es Dir hilft, aber du könntest mal Hier im Forum suchenmadexcept installieren, um so eine genau Ablaufverfolgung für den Fehler anstellen zu können.
Wir haben die DebugFunktionalität von der JCL verwendet.

Damit bekommen wir einen Stack inkl. Programmzeilennr. geloggt.

Zitat:
Der Fehler tritt warscheinlich auf, wenn TClientDataSet.Refresh aufgerufen wird.

Diese Anweisung wird nicht über Synchronize() ausgeführt, sondern es wird ein TMultiReadExclusiveWriteSynchronizer verwendet
Das bringt uns aber leider nicht weiter, wir wissen nicht wo wir ansetzen sollen.
Der Fehler tritt nur sporadisch und auch nur auf dem Produktionsserver auf. (ist nicht reproduzierbar)


Trotzdem Danke
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: EVariantArrayLockedError

  Alt 11. Nov 2004, 15:50
Hi,

dann könnte ich dir als "Quickn' Dirty" Lösung empfehlen, einen try..except Block darum zu bauen und bei einem EVariantArrayLockedError Error die Anweisung zu widerholen.

Ist zwar nicht schön... aber naja

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: EVariantArrayLockedError

  Alt 12. Nov 2004, 09:54
Zitat von mirage228:
dann könnte ich dir als "Quickn' Dirty" Lösung empfehlen, einen try..except Block darum zu bauen und bei einem EVariantArrayLockedError Error die Anweisung zu widerholen.
Das Ganze ist in einer Serveranwendung, die mehrere Datenbankthreads ausführt. Meine Vermutung ist, das der TMultiReadExclusiveWriteSynchronizer nicht richtig funktioniert. Wenn sich also Threads gegenseitig blockieren, bringt eine Wiederholung des Befehles nicht viel. Die Synchronisation zwischen den Threads ist vermutlich das Problem.
Aber ich werde Deinen Tipp mal an den Entwickler weitergeben.

Wir testen im Moment eine neue midas.dll evtl. ist ja das Problem mit dem Update behoben.

Danke für die Antwort
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#9

Re: EVariantArrayLockedError

  Alt 12. Nov 2004, 10:09
Der Fehler deutet doch darauf hin, dass auf ein Variantes Array mehrmals gleichzeit in verschiedenen Threads zugegriffen wird. So wie es aussieht ist also TClientDataSet.Refresh nicht ganz Thread sicher
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: EVariantArrayLockedError

  Alt 12. Nov 2004, 10:54
Zitat von jim_raynor:
Der Fehler deutet doch darauf hin, dass auf ein Variantes Array mehrmals gleichzeit in verschiedenen Threads zugegriffen wird. So wie es aussieht ist also TClientDataSet.Refresh nicht ganz Thread sicher
Das ist auch meine Vermutung.
Wir warten jetzt erst mal ein zwei Wochen ob das Update der midas.dll auf 7.1.1692.668 etwas bringt.
Ich werde das Ergebnis unseres Testes dann nochmal hier Posten.

Vielen Dank für die Antworten
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz