Ma találkoztam a Sátánnal. Személyesen.

Előzmény: pontosan 11 nappal ezelőtt belefutottam egy problémába. A hiba abban manifesztálódott, hogy egy animáció, amit csináltam, valamiért folyton kifagyasztotta a rendszert, amit használok. Mivel egy rakás konkurens számolást kell végeznie a rendszernek az animációm elkészítéséhez, ezért a hibát azonnal ebben a témakörben kerestem. 10 napom elment vele, közben elbuktam egy koncertlehetőséget (még a koncert előtt arról volt szó, hogy ha múlt hét elején befejezem a darabom, akkor a szerdai koncerten mehet), az elmúlt négy napban nem mozdultam ki a szobámból, és lázasan próbáltam megfejteni, hogy hol van az a két nyamvadt szál, és hol az a fránya memóriaterület, ami itt valamiért egyszerre íródik/olvasódik/törlődik/akármi.

Nem tudom megmondani, hogy az ötlet végül honnan jött. Lehet, hogy onnan, hogy már minden lehetőséget végigpróbáltam, és sehogy nem találtam meg a dolgot. Minden esetre két órája elkezdtem átfésülni az összes olyan forráskódot, amit fel tudtam lelni, és ami bármilyen módon meghívódik abból a programból, amit írok. Végül megtaláltam a következő sort egy külső függvénykönyvtárban:

 valid = valid && ( * ++ pos == ( ( ( __UPC_Frame + low + high ) ^ 0xFF ) + 1 ) & 0xFF ); // HDC

(Ez egy HDC névre hallgató, checksum-jellegű byte helyességét ellenőrzi.) És valóban, miután beírtam a hiányzó zárójelet, minden működik, ahogy kell:

 valid = valid && ( * ++ pos == ( ( ( ( __UPC_Frame + low + high ) ^ 0xFF ) + 1 ) & 0xFF ) ); // HDC

Ennél gonoszabb dologgal soha nem találkoztam. Azt hiszem, most meglakoltam minden bűnömért együttvéve.

Utoljára módosította SAdam 2010.X.18 03:02-n
PermaLink

Hozzászólások

0
Tagek: