Newsgroup: it.comp.lang.delphi
Titolo: Eccezione molto strana

Sto facendo un'applicazioncina per leggere la posta, e ho dei problemi quando
cerco di cancellare alcune email. Il problema si verifica ogni tanto, diciamo
il 50% delle volte, in maniera casuale.
La procedura di cancellazione è molto semplice, e la richiamo dall'interno di
un ciclo:
function TFrmMain.DeleteMail(Mail: TMail): Boolean;
var
  slUID: TStringList;
begin
  Result := False;
  if not POP3.Connected then
    raise Exception.Create('TFrmMain.DeleteMail - Connection not Open');
  slUID := TStringList.Create;
  LogFile.WriteText('TFrmMain.DeleteMail: ' + IntToStr(Mail.MsgIndex));
  try
      if POP3.UIDL(slUID, Mail.MsgIndex) then begin
        if SameText(Mail.UIDL, slUID[0]) then
          Result := POP3.Delete(Mail.MsgIndex)    <--- Exception
        else
          Result := False;
      end;
  finally
    slUID.Free;
  end;
end;
In pratica, prima di cancellare l'email verifico che l'UID sia corretto e
quindi procedo con la cancellazione.
L'eccezione si verifica sempre sulla POP3.Delete (Indy 10.52), e lo stack 
trace è imho fuorviante:
====================================================================================================
= 04/11/2004 14.10.41                                                                              =
====================================================================================================
Access violation at address 00421730 in module 'pustin.exe'. Read of address 00000008.
Exception class: EAccessViolation
Exception address: 00421730
----------------------------------------------------------------------------------------------------
Stack list, generated 04/11/2004 14.10.40
[00421730] Classes.TCollection.Assign (Line 3695, "classes.pas" + 6) + $7
[00404327] System.@HandleAnyException (Line 9362, "system.pas" + 13) + $0
[004594F6] Controls.TControl.PaletteChanged (Line 3204, "Controls.pas" + 7) + $D
[0045D5B8] Controls.TControl.GetDockEdge (Line 5077, "Controls.pas" + 3) + $1
[004B2F1A] IdMessageCoderUUE. + $0
[00572FC7] JvDataProvider. (Line 640, "..\..\run\JvDataProvider.pas" + 0) + $17F
[00546DFB] VirtualTrees.TBaseVirtualTree.ChangeCheckState (Line 11520, "VirtualTrees.pas" + 10) + $7
[005461C5] VirtualTrees.TVTHeader.SaveToStream (Line 10971, "VirtualTrees.pas" + 34) + $7
[00546D8D] VirtualTrees.TBaseVirtualTree.CalculateVerticalAlignments (Line 11490, "VirtualTrees.pas" + 22) + $13
[00542B58] VirtualTrees.TVirtualTreeColumns.Update (Line 8938, "VirtualTrees.pas" + 7) + $4
[0053BF80] VirtualTrees.HasMMX (Line 4782, "VirtualTrees.pas" + 15) + $1
[0046279A] Controls.TWinControl.SetBounds (Line 7435, "Controls.pas" + 22) + $7
[0045D622] Controls.TControl.GetDockEdge (Line 5090, "Controls.pas" + 16) + $10
[00546DBD] VirtualTrees.TBaseVirtualTree.ChangeCheckState (Line 11510, "VirtualTrees.pas" + 0) + $5
[0045DC48] Controls.TWinControl.Create (Line 5298, "Controls.pas" + 16) + $9
[005350D2] VirtualTrees. (Line 744, "VirtualTrees.pas" + 0) + $17AE
[00403EE0] System.TObject.GetInterface (Line 8478, "system.pas" + 2) + $5
[00403F32] System.TObject.GetInterface (Line 8489, "system.pas" + 13) + $16
[004E4050] ComCtrls.TToolBar.UpdateItem (Line 16910, "c:\program files\borland\d6\source\vcl\ComCtrls.pas" + 21) + $0
[004E472A] ComCtrls.TToolBar.UpdateButtonState (Line 17120, "c:\program files\borland\d6\source\vcl\ComCtrls.pas" + 5) + $B
[004E475F] ComCtrls.TToolBar.UpdateButtonStates (Line 17128, "c:\program files\borland\d6\source\vcl\ComCtrls.pas" + 1) + $6
[0053942D] VirtualTrees. (Line 2633, "VirtualTrees.pas" + 0) + $2079
[0046272B] Controls.TWinControl.SetBounds (Line 7424, "Controls.pas" + 11) + $0
[00533539] VirtualTrees. + $0
[004597EB] Controls.TControl.SetAlign (Line 3298, "Controls.pas" + 1) + $1
[00404000] System.@CallDynaInst (Line 8638, "system.pas" + 3) + $0
[00459E87] Controls.TControl.GetBoundsRect (Line 3462, "Controls.pas" + 3) + $8
[004597EB] Controls.TControl.SetAlign (Line 3298, "Controls.pas" + 1) + $1
[0052B7D7] JvWndProcHook.TJvHookInfos.WindowProc (Line 718, "..\..\run\JvWndProcHook.pas" + 49) + $8
[0045D3F6] Controls.TControl.IsVisibleStored (Line 5032, "Controls.pas" + 1) + $D
[004DE8AC] ComCtrls.TCustomListView.CNNotify (Line 14306, "c:\program files\borland\d6\source\vcl\ComCtrls.pas" + 152) + $12
[0053E18B] VirtualTrees.TVirtualTreeHintWindow.Create (Line 6272, "VirtualTrees.pas" + 11) + $1D
[0045CFC8] Controls.TControl.CMDesignHitTest (Line 4933, "Controls.pas" + 2) + $0
[0042C6C4] Classes.TDataModule.HandleCreateException (Line 10470, "classes.pas" + 7) + $4
[0043890A] Contnrs. + $0
[00438B5A] Contnrs.TObjectList.Notify (Line 298, "Contnrs.pas" + 4) + $C
[00480150] Forms.TraverseClients (Line 4836, "Forms.pas" + 2) + $3
[0048017B] Forms.TCustomForm.CMActionExecute (Line 4850, "Forms.pas" + 1) + $F
[005717F5] JvDataProvider. (Line 129, "..\..\run\JvDataProvider.pas" + 0) + $28D
[0042B7BD] Classes.TBasicAction.Create (Line 10034, "classes.pas" + 1) + $6
[004674CB] Controls.TDockTree.RemoveZone (Line 9783, "Controls.pas" + 22) + $A
[00468700] Controls.TDockTree.WindowProc (Line 10283, "Controls.pas" + 55) + $9
[00404000] System.@CallDynaInst (Line 8638, "system.pas" + 3) + $0
[0057310E] JvDataProvider. (Line 640, "..\..\run\JvDataProvider.pas" + 0) + $2C6
[0045ED20] Controls.TWinControl.RemoveControl (Line 5774, "Controls.pas" + 12) + $5
[0045ED98] Controls.TWinControl.GetControl (Line 5785, "Controls.pas" + 4) + $10
[0045EDC6] Controls.TWinControl.GetControlCount (Line 5791, "Controls.pas" + 2) + $10
[00532D45] VirtualTrees. + $0
[00404083] System.TObject.Dispatch (Line 8760, "system.pas" + 8) + $0
[004597EB] Controls.TControl.SetAlign (Line 3298, "Controls.pas" + 1) + $1
[0045F979] Controls.TWinControl.UpdateShowing (Line 6088, "Controls.pas" + 9) + $7
[004597EB] Controls.TControl.SetAlign (Line 3298, "Controls.pas" + 1) + $1
[0052B7D7] JvWndProcHook.TJvHookInfos.WindowProc (Line 718, "..\..\run\JvWndProcHook.pas" + 49) + $8
[0041DD44] Classes. (Line 1266, "classes.pas" + 0) + $390
[0045D3F6] Controls.TControl.IsVisibleStored (Line 5032, "Controls.pas" + 1) + $D
[0053E18B] VirtualTrees.TVirtualTreeHintWindow.Create (Line 6272, "VirtualTrees.pas" + 11) + $1D
[0045CFC8] Controls.TControl.CMDesignHitTest (Line 4933, "Controls.pas" + 2) + $0
[0042C6C4] Classes.TDataModule.HandleCreateException (Line 10470, "classes.pas" + 7) + $4
[00480150] Forms.TraverseClients (Line 4836, "Forms.pas" + 2) + $3
[00480197] Forms.TCustomForm.CMActionExecute (Line 4852, "Forms.pas" + 3) + $16
[00480432] Forms.TCustomForm.QueryInterface (Line 4921, "Forms.pas" + 5) + $6
[00575BA1] JvDataProvider.TJvBaseDataItems.ReadItem (Line 2445, "..\..\run\JvDataProvider.pas" + 18) + $7
All'interno di questo progetto utilizzo i componenti Indy10, le librerie Jedi 
e il VirtualTreeView.
Riuscite a capire qualcosa da questa stack list? Questo è solo un esempio perchè la 
stack list cambia leggermente di volta in volta.
Il problema si verifica su tutti i pc su cui l'ho provata, indipendentemente dal SO 
(ho provato solo XP o 2000)
-- 
Lis
Il mio sito: 
http://lis.altervista.org
FAQ di it.comp.lang.delphi: 
http://snipurl.com/faq_icld
La felicita è dappertutto, basta scovarla (anonimo)

Tanto x iniziare, succede solo a te, solo al cliente, o a entrambi?
Prova a cambiare le opz di compilazione, tipo align record field.
Poi, crea una piccola applicazione solo con gli indy; se estrai qualche 
unit accertati che non venga incluso niente di jedy e di virtual treeview.
Poi, prova a cancellare un po di mail e vedi se esplode.
Se va, metti una virtualtreeview ricompili e riprovi.
Se va aggiungi anche i jedi e vedi cosa succede.
Inoltre, manca la free di slUid.
-- 
Alberto Salvati
A NEAPOLITAN Delphi Developer who is studing c# and .net
"Dicette 'o pappece 'nfaccia 'a noce dammi 'o tiempo che pure te spertoso"

 Inoltre, manca la free di slUid.
??? Io la vedo, nel finally...
-- 
Lis
Il mio sito: 
http://lis.altervista.org
FAQ di it.comp.lang.delphi: 
http://snipurl.com/faq_icld
La prima necessità dell'uomo è il superfluo (Albert Einstein)

 stack list cambia leggermente di volta in volta.
Ho cambiato sistema: la stack trace precedente era ottenuta mediante le
librerie Jedi. Ora ho provato ad installare MadExcept e ho *finalmente*
trovato il problema che era causato da un errore all'interno di un evento
del virtual tree view. Componente eccellente, ma devo ancora capire bene
come utilizzarlo
 
-- 
Lis
Il mio sito: 
http://lis.altervista.org
FAQ di it.comp.lang.delphi: 
http://snipurl.com/faq_icld
Donne?...non mi fido di una cosa che sanguina per 5 giorni di fila al mese e
non muore