[svn-commits] mmichelson: branch group/issue8824 r183440 - in /team/group/issue8824: channe...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Mar 19 16:07:11 CDT 2009
Author: mmichelson
Date: Thu Mar 19 16:07:07 2009
New Revision: 183440
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=183440
Log:
Fix potential locking problems in chan_local.
Make the build_connected_line_data and build_redirecting_data functions
public so that chan_local can construct a proper frame and pass it to the
other side.
Modified:
team/group/issue8824/channels/chan_local.c
team/group/issue8824/include/asterisk/channel.h
team/group/issue8824/main/channel.c
Modified: team/group/issue8824/channels/chan_local.c
URL: http://svn.digium.com/svn-view/asterisk/team/group/issue8824/channels/chan_local.c?view=diff&rev=183440&r1=183439&r2=183440
==============================================================================
--- team/group/issue8824/channels/chan_local.c (original)
+++ team/group/issue8824/channels/chan_local.c Thu Mar 19 16:07:07 2009
@@ -426,11 +426,16 @@
the_other_channel = p->chan;
}
if (the_other_channel) {
- /*XXX investigate later for potential deadlock issues */
+ unsigned char frame_data[1024];
if (condition == AST_CONTROL_CONNECTED_LINE) {
- ast_queue_connected_line_update(the_other_channel, &this_channel->connected);
+ f.datalen = ast_build_connected_line_data(frame_data, sizeof(frame_data), &this_channel->connected);
} else {
- ast_queue_redirecting_update(the_other_channel, &this_channel->redirecting);
+ f.datalen = ast_build_redirecting_data(frame_data, sizeof(frame_data), &this_channel->redirecting);
+ }
+ f.subclass = condition;
+ f.data.ptr = frame_data;
+ if (!(res = local_queue_frame(p, isoutbound, &f, ast, 1))) {
+ ast_mutex_unlock(&p->lock);
}
}
} else {
Modified: team/group/issue8824/include/asterisk/channel.h
URL: http://svn.digium.com/svn-view/asterisk/team/group/issue8824/include/asterisk/channel.h?view=diff&rev=183440&r1=183439&r2=183440
==============================================================================
--- team/group/issue8824/include/asterisk/channel.h (original)
+++ team/group/issue8824/include/asterisk/channel.h Thu Mar 19 16:07:07 2009
@@ -2172,6 +2172,19 @@
void ast_set_connected_line(struct ast_channel *chan, const struct ast_party_connected_line *connected);
/*!
+ * \internal
+ * \brief Build the connected line information data frame.
+ *
+ * \param data Buffer to fill with the frame data
+ * \param datalen Size of the buffer to fill
+ * \param connected Connected line information
+ *
+ * \retval -1 if error
+ * \retval Amount of data buffer used
+ */
+int ast_build_connected_line_data(unsigned char *data, size_t datalen, const struct ast_party_connected_line *connected);
+
+/*!
* \brief Parse connected line indication frame data
*
* \param data Buffer with the frame data to parse
@@ -2222,6 +2235,18 @@
void ast_set_redirecting(struct ast_channel *chan, const struct ast_party_redirecting *redirecting);
/*!
+ * \brief Build the redirecting id data frame.
+ *
+ * \param data Buffer to fill with the frame data
+ * \param datalen Size of the buffer to fill
+ * \param redirecting Redirecting id information
+ *
+ * \retval -1 if error
+ * \retval Amount of data buffer used
+ */
+int ast_build_redirecting_data(unsigned char *data, size_t datalen, const struct ast_party_redirecting *redirecting);
+
+/*!
* \brief Parse redirecting indication frame data
*
* \param data Buffer with the frame data to parse
Modified: team/group/issue8824/main/channel.c
URL: http://svn.digium.com/svn-view/asterisk/team/group/issue8824/main/channel.c?view=diff&rev=183440&r1=183439&r2=183440
==============================================================================
--- team/group/issue8824/main/channel.c (original)
+++ team/group/issue8824/main/channel.c Thu Mar 19 16:07:07 2009
@@ -6007,18 +6007,7 @@
/* ******************************************************************* */
-/*!
- * \internal
- * \brief Build the connected line information data frame.
- *
- * \param data Buffer to fill with the frame data
- * \param datalen Size of the buffer to fill
- * \param connected Connected line information
- *
- * \retval -1 if error
- * \retval Amount of data buffer used
- */
-static int build_connected_line_data(unsigned char *data, size_t datalen, const struct ast_party_connected_line *connected)
+int ast_build_connected_line_data(unsigned char *data, size_t datalen, const struct ast_party_connected_line *connected)
{
int32_t value;
size_t length;
@@ -6082,7 +6071,7 @@
pos += sizeof(value);
return pos;
-} /* end build_connected_line_data() */
+} /* end ast_build_connected_line_data() */
@@ -6168,7 +6157,7 @@
unsigned char data[1024]; /* This should be large enough */
size_t datalen;
- datalen = build_connected_line_data(data, sizeof(data), connected);
+ datalen = ast_build_connected_line_data(data, sizeof(data), connected);
if (datalen == (size_t) -1) {
return;
}
@@ -6185,7 +6174,7 @@
unsigned char data[1024]; /* This should be large enough */
size_t datalen;
- datalen = build_connected_line_data(data, sizeof(data), connected);
+ datalen = ast_build_connected_line_data(data, sizeof(data), connected);
if (datalen == (size_t) -1) {
return;
}
@@ -6250,18 +6239,7 @@
/* ******************************************************************* */
-/*!
- * \internal
- * \brief Build the redirecting id data frame.
- *
- * \param data Buffer to fill with the frame data
- * \param datalen Size of the buffer to fill
- * \param redirecting Redirecting id information
- *
- * \retval -1 if error
- * \retval Amount of data buffer used
- */
-static int build_redirecting_data(unsigned char *data, size_t datalen, const struct ast_party_redirecting *redirecting)
+int ast_build_redirecting_data(unsigned char *data, size_t datalen, const struct ast_party_redirecting *redirecting)
{
int32_t value;
size_t length;
@@ -6377,7 +6355,7 @@
pos += sizeof(value);
return pos;
-} /* end build_redirecting_data() */
+} /* end ast_build_redirecting_data() */
@@ -6505,7 +6483,7 @@
unsigned char data[1024]; /* This should be large enough */
size_t datalen;
- datalen = build_redirecting_data(data, sizeof(data), redirecting);
+ datalen = ast_build_redirecting_data(data, sizeof(data), redirecting);
if (datalen == (size_t) -1) {
return;
}
@@ -6522,7 +6500,7 @@
unsigned char data[1024]; /* This should be large enough */
size_t datalen;
- datalen = build_redirecting_data(data, sizeof(data), redirecting);
+ datalen = ast_build_redirecting_data(data, sizeof(data), redirecting);
if (datalen == (size_t) -1) {
return;
}
More information about the svn-commits
mailing list