Frees internally allocated buffers or buffers allocated with ctaAllocBuffer.
DWORD ctaFreeBuffer ( void *buffer)
Argument |
Description |
buffer |
Pointer to a buffer allocated with ctaAllocBuffer, or to an internal buffer. |
Return value |
Description |
SUCCESS |
|
CTAERR_BAD_ARGUMENT |
If buffer is NULL. |
CTAERR_NOT_INITIALIZED |
Natural Access is not initialized. Call ctaInitialize first. |
ctaFreeBuffer frees internally allocated buffers and memory allocated with ctaAllocBuffer.
If an event received by ctaWaitEvent contains data, the buffer can be allocated inside Natural Access (data allocated and sent from a Natural Access service). In this case, the flag CTA_INTERNAL_BUFFER is set in the size field. Use ctaFreeBuffer to free the event buffer.
CTAHD commCtahd = NULL_CTAHD, mediaCtahd = NULL_CTAHD;
void EventLoop()
{
DWORD ret;
for(;;)
{
CTA_EVENT event = { 0 };
int ctaOwnsBuf = 0;
event.ctahd = commCtahd;
if( ret = ctaWaitEvent( commCtahd, &event ) != SUCCESS )
{
printf("ctaWaitEvent returns 0x%x -- exiting\n", "ret );
exit( -1 );
}
/* In Natural Access server mode, certain event buffers are allocated by
* Natural Access and then must be released back to Natural Access.
*/
if ( event.buffer )
{
if ( ctaOwnsBuf = event.size & CTA_INTERNAL_BUFFER )
{
/* This buffer is owned by Natural Access and will need to be
* released back to Natural Access after processing of the
* buffer is complete. Clear the Natural Access flags from the
* size field.
*/
event.size &= ~CTA_INTERNAL_BUFFER;
}
}
/* Event processing */
switch ( event.id )
{
case APPEVN_EXCHANGE_NAME:
. . .
default:
break;
}
/* Ensure proper release of Natural Access owned buffers. */
if ( ctaOwnsBuf )
{
ctaOwnsBuf = 0;
ctaFreeBuffer( event.buffer );
}
}
}