aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asterisk/dsp.h12
-rw-r--r--include/asterisk/frame.h4
2 files changed, 16 insertions, 0 deletions
diff --git a/include/asterisk/dsp.h b/include/asterisk/dsp.h
index 10ed53d1b..6f635a83d 100644
--- a/include/asterisk/dsp.h
+++ b/include/asterisk/dsp.h
@@ -115,4 +115,16 @@ int ast_dsp_get_tstate(struct ast_dsp *dsp);
/*! \brief Get tcount (Threshold counter) */
int ast_dsp_get_tcount(struct ast_dsp *dsp);
+/*!
+ * \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