Correction de bug et proposition de correction

Une question, un bug ?
Répondre
endmarsfr
Membre
Messages : 38
Inscription : lun. juil. 12, 2010 9:06 am

Correction de bug et proposition de correction

Message par endmarsfr »

Bonjour Antoine,

je profite du fait d'avoir installé VS 2005 ce matin et d'avoir récupéré les sources de GW pour résoudre un problème lié à la génération de statistiques qui ne fonctionnaient plus (cf message suivant : http://www.aguilmard.com/phpBB3/viewtop ... 0&sk=t&sd=) pour traiter un autre bug dont j'avais trouvé une solution de contournement.

En effet de façon systématique lorsque je démarre GW avec les exports FTP activés et la case à cocher "Auto" activée.
Je me retrouve avec un crash systématique de GW, idem lorsque je démarre manuellement l'export FTP avec la case à cochée "Auto" activée.

J'ai reproduit le bug et identifié où il avait eu lieu.
L'erreur se produit dans la classe CD3DGraph (fichier CD3DGraph.cpp)
lors de l'appel de la méthode :

Code : Tout sélectionner

void CD3DGraph::DrawRectangle(FRECT Rect,float Thick,DWORD Color,int CornerRadius)
à ligne 758 : lors de l'appel de l'instruction suivante :

Code : Tout sélectionner

m_pLine->SetWidth(Thick);

Il y a des appels dans le code à qui remettent à 0 m_Pline

Code : Tout sélectionner

SAFE_RELEASE(m_pLine);
Visiblement, dans le cas du bug que se produit dans mon cas, m_pLine a été visiblement vidé avant d'être utilisé.

j'ai donc effectuée une petite correction, sans chercher à comprendre pourquoi m_Pline était remis à 0.

Code : Tout sélectionner

if (m_pLine != 0x00000000) 
	{
		m_pLine->SetWidth(Thick);
		m_pLine->SetGLLines(1);
		m_pLine->SetAntialias(1);
	}
	else {
		D3DGException e(D3DGERR_CREATELINE,(DWORD)0);
		throw e;
	}


....
....


if (m_DeviceType==D3DDEVTYPE_SW)
	{
		DrawLineEx(pTFan,4*CornerRadius+5,&Out,Color);
	}
	else
	{
		if (m_pLine != 0x00000000) 
		{
			m_pLine->Begin();
			m_pLine->DrawTransform(pTFan,4*CornerRadius+5, &Out, Color); 
			m_pLine->End();
		}
	}
mon correctif fonctionne, mais le mieux serait de comprendre pourquoi m_pLine est réinitialisé et réutilisé.

Voilà, à minima, pourrais-tu, stp, inclure mon correctif dans le code source SVN, afin que les prochaines versions soient également corrigées ?

en te remerciant par avance,

PS - par ailleurs, j'ai essayé de recompiler GW en 64 bit, j'obtiens quelques erreurs de compilations.
Je te rassure, (j'ai mis à jour les path pour les includes et librairies x64 pour direct X).
J'avais lu dans un message du forum que tu avais essayé de compiler en x64, y étais tu parvenu ?


Cordialement,
endmarsfr
Membre
Messages : 38
Inscription : lun. juil. 12, 2010 9:06 am

Re: Correction de bug et proposition de correction

Message par endmarsfr »

Bonjour Antoine,

D'une façon générale, les plantages que je rencontre avec GW (2 ou 3) sont dus à des exceptions liées à l'exécution de code liés aux tracés DirectX.
Antoine, je pense que d'une manière générale, il faudrait "protéger" par un try catch les appels du type

m_pLine->Begin();
m_pLine->DrawTransform(pVertex+i,2,&Out,Color);
m_pLine->End();

afin d'éviter l'arrêt complet de GW.

cordialement,
Répondre