` Frequent GPFs in IniMgr.Kill in Clarion 6 Gold (Kevin Erskine) - Icetips Article
Icetips - Templates, Tools & Utilities for Clarion Developers

Templates, Tools and Utilities
for Clarion Developers

Icetips Article

Back to article list   Search Articles     Add Comment     Printer friendly     Direct link  

Clarion 6: Frequent GPFs in IniMgr.Kill in Clarion 6 Gold
2004-02-16 -- Kevin Erskine
 
I frequently get GPF in the INIMgr.Kill method -- I think the coding is wrong -- Not checking for NULLs

Current code in ABUTIL.CLW:

INIClass.Kill PROCEDURE

critProc  CriticalProcedure

  CODE
  critProc.init(SELF.critSect)
  SELF.UpdateQueue('__Dont_Touch_Me__','Sectors',|
                   SELF.Sectors,SELF.Sectors.Family,|
                   SELF.Sectors.Item,SELF.Sectors.Type) !***
  IF  NOT SELF.Sectors &= NULL
    DISPOSE(SELF.Sectors)
    SELF.Sectors &= NULL
  END
Should have the Self.UpdateQueue inside the check for NULL in the next line - so I think it should read:
INIClass.Kill PROCEDURE

critProc  CriticalProcedure

  CODE
  critProc.init(SELF.critSect)
  IF  NOT SELF.Sectors &= NULL
    SELF.UpdateQueue('__Dont_Touch_Me__','Sectors',|
                     SELF.Sectors,SELF.Sectors.Family,|
                     SELF.Sectors.Item,SELF.Sectors.Type) !***
    DISPOSE(SELF.Sectors)
    SELF.Sectors &= NULL
  END

OK - I have found, I identified and corrected my GPFs in C6 -- Here is my solution...

This has solved a GPF problem that has been plaguing me for the past month -- ARGhhhhhhh

My Applications repeatedly failed until I made these changes. I hope it helps others with theirs.

The problem is is a sporadic problem of .constructs and .destructs being called for a thread after it is terminated and certain classes are not checking themselves for valid pointers.

I am not the only one who has spent hours trying to track down these weird C6 New threading model problems.

2 changes made
1) See previous msg in the IniMgr.Kill method the Self.Sectors check
2) In the IniClass.Destruct the check for the critical section

Currently Reads...

INIClass.Destruct procedure
  CODE
  SELF.critSect.kill()
Should Be changed to
INIClass.Destruct procedure
  CODE
  IF NOT SELF.critSect &= NULL
    SELF.critSect.kill()
    SELF.critSect &= NULL
  END


Today is April 27, 2024, 5:32 pm
This article has been viewed 35121 times.
Google search has resulted in 112 hits on this article since January 25, 2004.



Back to article list   Search Articles   Add Comment   Printer friendly

Login

User Name:

Password: