these aren't the droids you're looking for, move along....

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6453 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2007-11-30 22:56:01 +00:00
parent 2dd0e0eb58
commit 321b68c5b4
17 changed files with 850 additions and 65 deletions

View File

@@ -46,6 +46,7 @@ struct switch_buffer {
switch_size_t datalen;
switch_size_t max_len;
switch_size_t blocksize;
switch_mutex_t *mutex;
uint32_t flags;
uint32_t id;
int32_t loops;
@@ -95,6 +96,33 @@ SWITCH_DECLARE(switch_status_t) switch_buffer_create_dynamic(switch_buffer_t **b
return SWITCH_STATUS_MEMERR;
}
SWITCH_DECLARE(void) switch_buffer_add_mutex(switch_buffer_t *buffer, switch_mutex_t *mutex)
{
buffer->mutex = mutex;
}
SWITCH_DECLARE(void) switch_buffer_lock(switch_buffer_t *buffer)
{
if (buffer->mutex) {
switch_mutex_lock(buffer->mutex);
}
}
SWITCH_DECLARE(switch_status_t) switch_buffer_trylock(switch_buffer_t *buffer)
{
if (buffer->mutex) {
return switch_mutex_lock(buffer->mutex);
}
return SWITCH_STATUS_FALSE;
}
SWITCH_DECLARE(void) switch_buffer_unlock(switch_buffer_t *buffer)
{
if (buffer->mutex) {
switch_mutex_unlock(buffer->mutex);
}
}
SWITCH_DECLARE(switch_size_t) switch_buffer_len(switch_buffer_t *buffer)
{
@@ -224,7 +252,7 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_write(switch_buffer_t *buffer, const
}
*/
if (switch_test_flag(buffer, SWITCH_BUFFER_FLAG_DYNAMIC)) {
if (freespace < datalen) {
if (freespace < datalen && (!buffer->max_len || (buffer->datalen + datalen <= buffer->max_len))) {
switch_size_t new_size, new_block_size;
new_size = buffer->datalen + datalen;
@@ -266,6 +294,18 @@ SWITCH_DECLARE(void) switch_buffer_zero(switch_buffer_t *buffer)
buffer->head = buffer->data;
}
SWITCH_DECLARE(switch_size_t) switch_buffer_zwrite(switch_buffer_t *buffer, const void *data, switch_size_t datalen)
{
switch_size_t w;
if (!(w = switch_buffer_write(buffer, data, datalen))) {
switch_buffer_zero(buffer);
return switch_buffer_write(buffer, data, datalen);
}
return w;
}
SWITCH_DECLARE(void) switch_buffer_destroy(switch_buffer_t **buffer)
{
if (buffer && *buffer) {