`
Par2: File not open error when file is opened 1999-06-07 -- Dan Presnell I'll explain why leaving a file open can cause a not open error. Basically, it's because ABC doesn't know when a file is closed by the CLOSE(FILE) procedure or by automatic closing on thread termination. ABC "remembers" itself whether a file was open or not. Suppose this sequence: ProcA executes. It's on thread 1. ABC opens the file and remembers it was opened on thread 1. ProcB executes, on thread 2. ABC checks, sees that the file has not been opened on thread 2, then opens it, and remembers that it's open on thread 2 now. ProcA terminates. The Clarion runtime library closes the file on the termination of this thread (thread 1). This is automatic behavior that is supplied by the runtime library. But ABC is not instructed to close the file with the close method. ABC has no idea that the file has been closed by the thread termination. So ABC still thinks (from its own memory) that the file is still open on thread 1. Now ProcA (or any other procedure) executes. Thread 1 is available, so it executes on thread one. ABC checks itself to see of the file is open on thread 1. It sees that it is. (This is wrong, of course, but that is what ABC "remembers" because ABC never closed the file on thread 1.) So it doesn't open the file, thinking the file is already opened on that thread. Then when you do something with the file, you get a file not opened error. If the procedure executing here is other than ProcA, say ProcC, then this is where the error appears, even though the real coding error is somewhere else entirely. That makes it difficult to track down a mismatched close method for ABC methods. Sometimes, even, there is no apparent mismatch in the code, but something causes a return from a procedure before the ABC close method is called. Printed November 21, 2024, 12:47 pm This article has been viewed/printed 35200 times. |