aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-29 00:06:08 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-11-29 00:06:08 +0000
commit31f04e79318a9865796c88a8957d996e9d6fbf45 (patch)
tree265226ede6962ca4adc600a521e69c9379af0d68
parent4a5c618632ac4eddab103ad9afbd8c5226153eab (diff)
Merge a change from team/russell/chan_refcount ...
This makes ast_stopstream() thread-safe. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@90142 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--include/asterisk/file.h11
-rw-r--r--main/file.c5
2 files changed, 13 insertions, 3 deletions
diff --git a/include/asterisk/file.h b/include/asterisk/file.h
index 69229d406..cada23413 100644
--- a/include/asterisk/file.h
+++ b/include/asterisk/file.h
@@ -172,11 +172,16 @@ int ast_streamfile(struct ast_channel *c, const char *filename, const char *pref
int ast_stream_and_wait(struct ast_channel *chan, const char *file,
const char *language, const char *digits);
-/*! Stops a stream */
-/*!
+/*!
+ * \brief Stops a stream
+ *
* \param c The channel you wish to stop playback on
+ *
* Stop playback of a stream
- * Returns 0 regardless
+ *
+ * \retval 0 always
+ *
+ * \note The channel does not need to be locked before calling this function.
*/
int ast_stopstream(struct ast_channel *c);
diff --git a/main/file.c b/main/file.c
index 65dd5e1b9..fcdc35746 100644
--- a/main/file.c
+++ b/main/file.c
@@ -136,6 +136,8 @@ int ast_format_unregister(const char *name)
int ast_stopstream(struct ast_channel *tmp)
{
+ ast_channel_lock(tmp);
+
/* Stop a running stream if there is one */
if (tmp->stream) {
ast_closestream(tmp->stream);
@@ -148,6 +150,9 @@ int ast_stopstream(struct ast_channel *tmp)
ast_closestream(tmp->vstream);
tmp->vstream = NULL;
}
+
+ ast_channel_unlock(tmp);
+
return 0;
}