Mail Archives: djgpp/1999/01/17/05:00:57
On Thu, 14 Jan 1999, Harold Roman wrote:
> How would I use the "free_iret" function with the "chain"
> function?
Why do you need that at all? Usually, you chain the interrupt at the
beginning of the program and unchain it before exiting. All memory
allocated by a program is automatically freed when it exits, so you
shouldn't need to free the wrapper.
Are you calling the chain function more than once? If so, don't.
> This makes the call to the "chain" function with the seginfo
> for the new handler and no wrapper is explicitly created.
> Are you suggesting that the two should be combined? that I
> should create a wrapper for the handler then call the
> "chain" function with the seginfo of the wrapper?
No, the chain function allocates the wrapper internally.
> Well, it is a strange application for sure :). It is a test
> program that exercises and tests a PCI card. It has a main
> loop that calls sub-tests that test the card in different
> ways. Each sub-test will register it's own interrupt
> handlers, and then de-register them. So, in a long test run,
> thousands of wrappers may be allocated.
If so, you will probably need to change the source of
_go32_dpmi_chain_protected_mode_interrupt_vector. Currently, it
doesn't plug the address of the wrapper it allocates, so you cannot
free it.
> I observed that memory is disapearing faster than a 100
> bytes at a time. I put calls to
> _go32_dpmi_remaining_virtual_memory around the "chain"
> function and I observed that some times no memory is
> consumed, other times 64KB is lost. (Perhaps this really a
> memory fragmentation problem?)
This probably has nothing to do with the wrappers. See section 15.2
of the FAQ for some insight on this.
- Raw text -