Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Bugs mit Lösungen... (https://www.delphipraxis.net/192797-delphi-bugs-mit-loesungen.html)

Mavarik 19. Mai 2017 14:05

Delphi Bugs mit Lösungen...
 
Hallo Zusammen...

Ich dache mir, ich mache mal einen Thread auf mit Bugreports die Ich gepostet habe und bei denen die Lösung schon enthalten ist...

Ich habe kein Projekt bei dem ich nicht wenigstens 2-3 Source-Files aus dem Delphi Source-Dir in mein Projekt mit meinen Fixes rüber ziehe.

Hier mein letzter:

Memory Leak in TFontGlyphManager mein QC (RSP-17256) ist closed, daher habe ich die Infos in RSP-18012 geschrieben.

Änderungen in FMX.FontGlyphs.pas

Delphi-Quellcode:
destructor TFontGlyphManager.Destroy;
begin
  FreeResource;

  if Assigned(FMethods) then // 
    FMethods.Free;          // Fehlte
 
  inherited;
end;

und in
Delphi-Quellcode:
class function TFontGlyphManager.InternalGetFontGlyphManager: TFontGlyphManager;

Delphi-Quellcode:
// end;// 2 Zeilen tiefer
   FCurrentManager.FMethods := TList<TMethodDescriptor>.Create; // Nur 1x
end;
Mavarik

mensch72 19. Mai 2017 14:38

AW: Delphi Bugs mit Lösungen...
 
wenn ich Zeit habe und die "rechtliche Freigabe" bekomme, veröffentliche ich auch mal ein paar unserer (alten) BLE Fixes... Delphi/FMX für IoT wird groß beworben, aber da "komische" Sachen seit XE8.1 teils immer weiter führen... wird langsam anstrengend

Aber Asche auf unser Haupt:
1. klar nutzt das kaum jemand und hier ist CrossPlattform + CrossHardwareStandard(BLE4.0->4.1->4.2) ne echte Herausforderung
2. wer es "wirklich" nutzt und weiß wie es (trotzdem)geht verrät es oft nicht gern öffentlich und erstellt daher keine QC Einträge

Uwe Raabe 19. Mai 2017 14:39

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Mavarik (Beitrag 1372077)
Delphi-Quellcode:
  if Assigned(FMethods) then // 
    FMethods.Free;          // Fehlte

Das
Delphi-Quellcode:
if Assigned
kannst du dir sparen, das macht das
Delphi-Quellcode:
Free
selbst. Unter ARC wird das vom Compiler sowieso durch eine nil-Zuweisung ersetzt, was die Abfrage ebenso obsolet macht.

Mavarik 19. Mai 2017 14:56

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1372082)
Zitat:

Zitat von Mavarik (Beitrag 1372077)
Delphi-Quellcode:
  if Assigned(FMethods) then // 
    FMethods.Free;          // Fehlte

Das
Delphi-Quellcode:
if Assigned
kannst du dir sparen, das macht das
Delphi-Quellcode:
Free
selbst. Unter ARC wird das vom Compiler sowieso durch eine nil-Zuweisung ersetzt, was die Abfrage ebenso obsolet macht.

Auf eine Methode eine Klasse zuzugreifen ohne zu testen, ob die Klasse Assigned ist - widerstrebt mir einfach... :stupid:

Darlo 19. Mai 2017 15:01

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Mavarik (Beitrag 1372077)
Delphi-Quellcode:
  if Assigned(FMethods) then // 
    FMethods.Free;          // Fehlte

Sollte das nicht besser so heißen?
Delphi-Quellcode:
  if Assigned(FMethods) then
  {$IFDEF AUTOREFCOUNT}
    FMethods.DisposeOf;
  {$ELSE}
    FMethods.Free;
Warum wird im Free eigentlich nicht geprüft ob ARC und dann DisposeOf aufgerufen? Würde ne Menge an Code sparen.

Uwe Raabe 19. Mai 2017 15:04

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Darlo (Beitrag 1372086)
Warum wird im Free eigentlich nicht geprüft ob ARC und dann DisposeOf aufgerufen? Würde ne Menge an Code sparen.

Weil Free unter ARC eben gar nicht aufgerufen wird! Der Compiler ersetzt das einfach durch eine nil-Zuweisung.

Darlo 19. Mai 2017 15:06

AW: Delphi Bugs mit Lösungen...
 
Dann könnte der Compiler das doch durch disposeof ersetzen :gruebel:

Fritzew 19. Mai 2017 15:11

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Darlo (Beitrag 1372088)
Dann könnte der Compiler das doch durch disposeof ersetzen :gruebel:

Und für was sollte das dann gut sein?
Disposeof wird nur benötigt wenn da mehrere Referenzen auf das selbe Object sind, und Ressourcen freigegeben werden müssen.
Ansonsten besteht keinerlei Grund das einzusetzen.

Uwe Raabe 19. Mai 2017 15:14

AW: Delphi Bugs mit Lösungen...
 
Zitat:

Zitat von Darlo (Beitrag 1372088)
Dann könnte der Compiler das doch durch disposeof ersetzen :gruebel:

Nicht unbedingt, denn DisposeOf macht etwas anders als eine nil-Zuweisung.

Stevie 19. Mai 2017 16:39

AW: Delphi Bugs mit Lösungen...
 
Waddn gruseliger Code ist das denn in TFontGlyphManager :wall:

Das können nur Artefakte aus VGScene Zeiten sein, wo noch Delphi 7 und andere Versionen unterstützt wurden, die noch kein class constructor/destructor kannten...

Delphi-Quellcode:
RegisterCharacterHandleMethod
und
Delphi-Quellcode:
UnRegisterCharacterHandleMethod
sind übrigens auch defekt, die krachen nämlich, wenn vorher nicht
Delphi-Quellcode:
TFontGlyphManager.Current
aufgerufen wurde. Das muss man aber nicht machen, weil das ja eh statische Methoden sind (soll heißen, ich kann
Delphi-Quellcode:
TFontGlyphManager.RegisterCharacterHandleMethod
aufrufen). Das wiederum lässt mich vermuten, dass man FMethods früher (class constructor?) erzeugen und im entsprechenden destructor wieder freigeben sollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 1 von 2  1 2   

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