switch_core_rwlock.c File Reference

#include <switch.h>
#include "private/switch_core_pvt.h"

Include dependency graph for switch_core_rwlock.c:

Go to the source code of this file.

Functions

switch_status_t switch_core_session_io_read_lock (switch_core_session_t *session)
switch_status_t switch_core_session_io_write_lock (switch_core_session_t *session)
switch_status_t switch_core_session_io_rwunlock (switch_core_session_t *session)
switch_status_t switch_core_session_read_lock (switch_core_session_t *session)
switch_status_t switch_core_session_read_lock_hangup (switch_core_session_t *session)
void switch_core_session_write_lock (switch_core_session_t *session)
void switch_core_session_rwunlock (switch_core_session_t *session)


Function Documentation

switch_status_t switch_core_session_read_lock ( switch_core_session_t session  ) 

Definition at line 82 of file switch_core_rwlock.c.

References CF_THREAD_SLEEPING, SSF_DESTROYED, switch_channel_down_nosig, switch_channel_get_name(), SWITCH_CHANNEL_ID_LOG, switch_channel_test_flag(), switch_core_session_get_uuid(), switch_core_session_wake_session_thread(), SWITCH_LOG_ERROR, switch_log_printf(), SWITCH_STATUS_FALSE, SWITCH_STATUS_SUCCESS, switch_test_flag, switch_thread_rwlock_tryrdlock(), and switch_thread_rwlock_unlock().

00084 {
00085         switch_status_t status = SWITCH_STATUS_FALSE;
00086 
00087         if (session->rwlock) {
00088                 if (switch_test_flag(session, SSF_DESTROYED) || switch_channel_down_nosig(session->channel)) {
00089                         status = SWITCH_STATUS_FALSE;
00090                         if (switch_thread_rwlock_tryrdlock(session->rwlock) == SWITCH_STATUS_SUCCESS) {
00091                                 if (switch_channel_test_flag(session->channel, CF_THREAD_SLEEPING)) {
00092 #ifdef SWITCH_DEBUG_RWLOCKS
00093                                         switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_core_session_get_uuid(session), SWITCH_LOG_ERROR, "%s %s Ping thread\n",
00094                                                                           switch_core_session_get_uuid(session), switch_channel_get_name(session->channel));
00095 #endif
00096                                         switch_core_session_wake_session_thread(session);
00097                                 }
00098                                 switch_thread_rwlock_unlock(session->rwlock);
00099                         }
00100 #ifdef SWITCH_DEBUG_RWLOCKS
00101                         switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_core_session_get_uuid(session), SWITCH_LOG_ERROR, "%s %s Read lock FAIL\n",
00102                                                           switch_core_session_get_uuid(session), switch_channel_get_name(session->channel));
00103 #endif
00104                 } else {
00105                         status = (switch_status_t) switch_thread_rwlock_tryrdlock(session->rwlock);
00106 #ifdef SWITCH_DEBUG_RWLOCKS
00107                         switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_core_session_get_uuid(session), SWITCH_LOG_ERROR, "%s %s Read lock ACQUIRED\n",
00108                                                           switch_core_session_get_uuid(session), switch_channel_get_name(session->channel));
00109 #endif
00110                 }
00111         }
00112 
00113         return status;
00114 }

switch_status_t switch_core_session_read_lock_hangup ( switch_core_session_t session  ) 

Definition at line 120 of file switch_core_rwlock.c.

References CS_DESTROY, SSF_DESTROYED, switch_channel_get_name(), switch_channel_get_state(), SWITCH_CHANNEL_ID_LOG, switch_core_session_get_uuid(), SWITCH_LOG_ERROR, switch_log_printf(), SWITCH_STATUS_FALSE, switch_test_flag, and switch_thread_rwlock_tryrdlock().

00122 {
00123         switch_status_t status = SWITCH_STATUS_FALSE;
00124 
00125         if (session->rwlock) {
00126                 if (switch_test_flag(session, SSF_DESTROYED) || switch_channel_get_state(session->channel) >= CS_DESTROY) {
00127                         status = SWITCH_STATUS_FALSE;
00128 #ifdef SWITCH_DEBUG_RWLOCKS
00129                         switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_core_session_get_uuid(session), SWITCH_LOG_ERROR, "%s %s Read lock FAIL\n",
00130                                                           switch_core_session_get_uuid(session), switch_channel_get_name(session->channel));
00131 #endif
00132                 } else {
00133                         status = (switch_status_t) switch_thread_rwlock_tryrdlock(session->rwlock);
00134 #ifdef SWITCH_DEBUG_RWLOCKS
00135                         switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_core_session_get_uuid(session), SWITCH_LOG_ERROR, "%s %s Read lock ACQUIRED\n",
00136                                                           switch_core_session_get_uuid(session), switch_channel_get_name(session->channel));
00137 #endif
00138                 }
00139         }
00140 
00141         return status;
00142 }

void switch_core_session_rwunlock ( switch_core_session_t session  ) 

Definition at line 163 of file switch_core_rwlock.c.

References switch_thread_rwlock_unlock().

00164 {
00165 #endif
00166         switch_thread_rwlock_unlock(session->rwlock);
00167 
00168 }

void switch_core_session_write_lock ( switch_core_session_t session  ) 

Definition at line 151 of file switch_core_rwlock.c.

References switch_thread_rwlock_wrlock().

00152 {
00153 #endif
00154         switch_thread_rwlock_wrlock(session->rwlock);
00155 }


Generated on Sun May 20 04:00:09 2012 for FreeSWITCH API Documentation by  doxygen 1.4.7