comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » DLM returning a pointer...
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: DLM returning a pointer... [message #24869 is a reply to message #24777] Tue, 24 April 2001 04:48 Go to previous messageGo to previous message
Randall Skelton is currently offline  Randall Skelton
Messages: 169
Registered: October 2000
Senior Member
After reading Craig's email, I am somewhat confused...

What I really need to know is how do I allocate a memory block in my C
function such that I am sure that it cannot be overwritten or otherwise
corrupted. I want a routine that can establish a connection to a given
'port' which requires me to allocate some memory and return a pointer to
this memory block. I then want to be very sure that the memory allocated
is 'safe' while now that I am back in IDL. Then I want to be able to pass
this pointer from IDL back to C so as the database connection must be
established before data can be sent or received. Finally, from IDL I
would close the connection (again requiring me to pass this pointer) and
de-allocate the memory. Obviously, such an implementation is risky as it
could lead to memory leaks in IDL if the programmer fails to close the
connection properly. I am open to other ideas, but I want to separate the
open and close connection functions. I am thinking about putting a
time-out on the connection so that if idle for more than n minutes it
deallocates. I fear, however, that a time-out would likely lead to
problems and would be rather tricky to implement. It would be nice if
there were some way to ensure that there was a matching 'open' and 'close'
connection function with the IDL compiler...

Will the memory allocated with the IDL_GetScratch function span the forked
C process life? i.e. if I use IDL_GetScratch to allocate memory, will IDL
(potentially) cleanup and deallocate the memory before I call
IDL_Deltmp()? What about IDL_MemAlloc and IDL_MemFree? Should I just
consider defining an list say 10 of these structures with IDL_MemAllocPerm
(giving me 10 possible connections) and forget about reclaiming the
memory?

(I am assuming here that since IDL is calling the C program, this is a
unix fork process giving C access to IDL's memory space alone. I am
reluctant to use malloc directly in C as I doubt that IDL would respect
the memory it allocates when I return to IDL).

All comments, suggestions and queries are greatly appreciated!

Randall Skelton

NB: just wait until I start asking how to make this multi threaded with
asynchronous output from simultaneous connections ;)

On Tue, 24 Apr 2001, Martin Schultz wrote:

>>> Hi all,
>>>
>>> I am trying to write a few IDL functions which mirror those of a C library
>>> [...]
>>
>> I don't think it would be wise to return a pointer, although
>> technically it is possible. You could in principle cast the pointer
>> to an integer, and return the integer.
>
> ... you probably meant an unsigned 64-bit value (in IDL speak
> ULONG64).
>
> Martin
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: including literal PostScript
Next Topic: Re: including literal PostScript

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Sat Oct 11 00:24:51 PDT 2025

Total time taken to generate the page: 1.99064 seconds