Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions common_modules/module_lib/src/txm_module_object_deallocate.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,27 @@
#define TXM_MODULE
#include "txm_module.h"
#ifndef TXM_MODULE_OBJECT_DEALLOCATE_CALL_NOT_USED

/* DEPRECATION NOTICE
* txm_module_object_deallocate() is deprecated and must not be used in new
* code. It is retained only for backward-compatibility with existing modules.
*
* WHY: when a module calls tx_timer_delete(), tx_semaphore_delete(), or any
* other tx_*_delete() service, the Module Manager dispatch layer automatically
* releases the associated object pool memory after the kernel cleanup
* completes. No separate deallocation call is required or expected.
*
* WHAT TO DO: remove any call to txm_module_object_deallocate() from your
* module. The corresponding tx_*_delete() call already handles everything.
*
* RISK: calling txm_module_object_deallocate() on a live kernel object (one
* whose tx_*_delete() has not yet been called) frees the backing pool memory
* while the object is still referenced by the kernel, which is undefined
* behaviour (use-after-free).
*/
#pragma message("txm_module_object_deallocate() is deprecated and must not be used. " \
"Call tx_*_delete() instead; the Module Manager dispatch layer " \
"releases pool memory automatically on success.")
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,17 @@
/* */
/* DESCRIPTION */
/* */
/* This function deallocates a previously allocated object. */
/* DEPRECATED. This function is called internally by the Module */
/* Manager dispatch layer after a successful tx_*_delete() call from */
/* a module. It must not be called directly by module or application */
/* code. Calling it on a live kernel object (one whose tx_*_delete() */
/* has not yet been called) frees the backing pool memory while the */
/* object is still referenced by the kernel (use-after-free). */
/* */
/* Module authors: remove any explicit call to */
/* txm_module_object_deallocate(). Calling the appropriate */
/* tx_*_delete() service is sufficient; pool deallocation is handled */
/* automatically by the dispatch layer. */
/* */
/* INPUT */
/* */
Expand Down