diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/dsp.h | 12 | ||||
-rw-r--r-- | include/asterisk/frame.h | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/include/asterisk/dsp.h b/include/asterisk/dsp.h index 81735d625..871a51ac9 100644 --- a/include/asterisk/dsp.h +++ b/include/asterisk/dsp.h @@ -138,4 +138,16 @@ int ast_dsp_reload(void); int ast_dsp_init(void); +/*! + * \brief Hint that a frame from a dsp was freed + * + * This is called from ast_frame_free if AST_FRFLAG_FROM_DSP is set. This occurs + * because it is possible for the dsp to be freed while someone still holds a reference + * to the frame that is in that dsp. This has been known to happen when the dsp on a Zap + * channel detects a busy signal. The channel is hung up, and the application that read the + * frame to begin with still has a reference to the frame. + * + * \return nothing + */ +void ast_dsp_frame_freed(struct ast_frame *fr); #endif /* _ASTERISK_DSP_H */ diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h index ad4b82920..719048b02 100644 --- a/include/asterisk/frame.h +++ b/include/asterisk/frame.h @@ -130,6 +130,10 @@ enum { * The translator can not be free'd if the frame inside of it still has * this flag set. */ AST_FRFLAG_FROM_TRANSLATOR = (1 << 1), + /*! This frame came from a dsp and is still the original frame. + * The dsp cannot be free'd if the frame inside of it still has + * this flag set. */ + AST_FRFLAG_FROM_DSP = (1 << 2), }; /*! \brief Data structure associated with a single frame of data |