Changeset 581 for pjproject/trunk


Ignore:
Timestamp:
Jul 3, 2006 2:18:17 PM (18 years ago)
Author:
bennylp
Message:

Fixed minor bug in pool_caching.c that prevent pool from being reused if the capacity has changed when the pool is released

Location:
pjproject/trunk
Files:
2 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/include/pj/string.h

    r514 r581  
    544544PJ_DECL(int) pj_utoa_pad( unsigned long val, char *buf, int min_dig, int pad); 
    545545 
     546 
     547/** 
     548 * Fill the memory location with zero. 
     549 * 
     550 * @param dst       The destination buffer. 
     551 * @param size      The number of bytes. 
     552 */ 
     553PJ_INLINE(void) pj_bzero(void *dst, pj_size_t size) 
     554{ 
     555    bzero(dst, size); 
     556} 
     557 
     558 
    546559/** 
    547560 * Fill the memory location with value. 
  • pjproject/trunk/pjlib/src/pj/pool_caching.c

    r364 r581  
    199199    pj_pool_reset(pool); 
    200200 
     201    pool_capacity = pj_pool_get_capacity(pool); 
     202 
    201203    /* 
    202204     * Otherwise put the pool in our recycle list. 
  • pjproject/trunk/pjsip-apps/build/Makefile

    r508 r581  
    4444 
    4545 
    46  
    47 ############################################################################### 
    48 # Defines for building PJSIP-PERF 
    49 # 
    50 export PJSIPPERF_SRCDIR = ../src/pjsip-perf 
    51 export PJSIPPERF_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \ 
    52                          handler_call.o handler_options.o main.o 
    53 export PJSIPPERF_CFLAGS += $(_CFLAGS) 
    54 export PJSIPPERF_LDFLAGS += $(_LDFLAGS) 
    55 export PJSIPPERF_EXE:=../bin/pjsip-perf-$(TARGET_NAME)$(HOST_EXE) 
    56  
    57  
    58  
    5946export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT  
    6047############################################################################### 
     
    6249# 
    6350# 
    64 TARGETS := pjsua pjsip-perf samples 
     51TARGETS := pjsua samples 
    6552 
    6653.PHONY: $(TARGETS) 
     
    7966        $(MAKE) -f $(RULES_MAK) APP=PJSUA app=pjsua $(PJSUA_EXE) 
    8067 
    81 pjsip-perf: 
    82         $(MAKE) -f $(RULES_MAK) APP=PJSIPPERF app=pjsip-perf $(PJSUA_EXE) 
    83  
    8468samples: 
    8569        $(MAKE) -f Samples.mak 
     
    9175clean depend realclean: 
    9276        $(MAKE) -f $(RULES_MAK) APP=PJSUA app=pjsua $@ 
    93         $(MAKE) -f $(RULES_MAK) APP=PJSIPPERF app=pjsip-perf $@ 
    9477        $(MAKE) -f Samples.mak $@ 
    9578        @if test "$@" = "depend"; then \ 
    9679          echo '$(PJSUA_EXE): $(PJSIP_LIB) $(PJSIP_UA_LIB) $(PJSIP_SIMPLE) $(PJSUA_LIB_LIB) $(PJLIB_LIB) $(PJLIB_UTIL_LIB) $(PJMEDIA_LIB) $(PJMEDIA_CODEC_LIB) Makefile' >> .pjsua-$(TARGET_NAME).depend; \ 
    97           echo '$(PJSIPPERF_EXE): $(PJSIP_LIB) $(PJSIP_UA_LIB) $(PJSIP_SIMPLE) $(PJSUA_LIB_LIB) $(PJLIB_LIB) $(PJLIB_UTIL_LIB) $(PJMEDIA_LIB) $(PJMEDIA_CODEC_LIB)' >> .pjsip-perf-$(TARGET_NAME).depend; \ 
    9880        fi 
    9981 
  • pjproject/trunk/pjsip-apps/build/pjsip_apps.dsw

    r504 r581  
    6464############################################################################### 
    6565 
    66 Project: "pjsip_perf"=".\pjsip_perf.dsp" - Package Owner=<4> 
     66Project: "pjsip_simple"="..\..\pjsip\build\pjsip_simple.dsp" - Package Owner=<4> 
     67 
     68Package=<5> 
     69{{{ 
     70}}} 
     71 
     72Package=<4> 
     73{{{ 
     74}}} 
     75 
     76############################################################################### 
     77 
     78Project: "pjsip_ua"="..\..\pjsip\build\pjsip_ua.dsp" - Package Owner=<4> 
     79 
     80Package=<5> 
     81{{{ 
     82}}} 
     83 
     84Package=<4> 
     85{{{ 
     86}}} 
     87 
     88############################################################################### 
     89 
     90Project: "pjsua"=".\pjsua.dsp" - Package Owner=<4> 
    6791 
    6892Package=<5> 
     
    79103    End Project Dependency 
    80104    Begin Project Dependency 
     105    Project_Dep_Name pjmedia 
     106    End Project Dependency 
     107    Begin Project Dependency 
     108    Project_Dep_Name pjmedia_codec 
     109    End Project Dependency 
     110    Begin Project Dependency 
    81111    Project_Dep_Name pjsip_core 
    82112    End Project Dependency 
     
    90120    Project_Dep_Name pjsua_lib 
    91121    End Project Dependency 
     122}}} 
     123 
     124############################################################################### 
     125 
     126Project: "pjsua_lib"="..\..\pjsip\build\pjsua_lib.dsp" - Package Owner=<4> 
     127 
     128Package=<5> 
     129{{{ 
     130}}} 
     131 
     132Package=<4> 
     133{{{ 
     134}}} 
     135 
     136############################################################################### 
     137 
     138Project: "sample_debug"=".\sample_debug.dsp" - Package Owner=<4> 
     139 
     140Package=<5> 
     141{{{ 
     142}}} 
     143 
     144Package=<4> 
     145{{{ 
     146    Begin Project Dependency 
     147    Project_Dep_Name pjlib 
     148    End Project Dependency 
     149    Begin Project Dependency 
     150    Project_Dep_Name pjlib_util 
     151    End Project Dependency 
    92152    Begin Project Dependency 
    93153    Project_Dep_Name pjmedia 
    94154    End Project Dependency 
    95 }}} 
    96  
    97 ############################################################################### 
    98  
    99 Project: "pjsip_simple"="..\..\pjsip\build\pjsip_simple.dsp" - Package Owner=<4> 
    100  
    101 Package=<5> 
    102 {{{ 
    103 }}} 
    104  
    105 Package=<4> 
    106 {{{ 
    107 }}} 
    108  
    109 ############################################################################### 
    110  
    111 Project: "pjsip_ua"="..\..\pjsip\build\pjsip_ua.dsp" - Package Owner=<4> 
    112  
    113 Package=<5> 
    114 {{{ 
    115 }}} 
    116  
    117 Package=<4> 
    118 {{{ 
    119 }}} 
    120  
    121 ############################################################################### 
    122  
    123 Project: "pjsua"=".\pjsua.dsp" - Package Owner=<4> 
     155    Begin Project Dependency 
     156    Project_Dep_Name pjmedia_codec 
     157    End Project Dependency 
     158    Begin Project Dependency 
     159    Project_Dep_Name pjsip_core 
     160    End Project Dependency 
     161    Begin Project Dependency 
     162    Project_Dep_Name pjsip_simple 
     163    End Project Dependency 
     164    Begin Project Dependency 
     165    Project_Dep_Name pjsip_ua 
     166    End Project Dependency 
     167    Begin Project Dependency 
     168    Project_Dep_Name pjsua_lib 
     169    End Project Dependency 
     170}}} 
     171 
     172############################################################################### 
     173 
     174Project: "samples"=".\samples.dsp" - Package Owner=<4> 
    124175 
    125176Package=<5> 
     
    157208############################################################################### 
    158209 
    159 Project: "pjsua_lib"="..\..\pjsip\build\pjsua_lib.dsp" - Package Owner=<4> 
    160  
    161 Package=<5> 
    162 {{{ 
    163 }}} 
    164  
    165 Package=<4> 
    166 {{{ 
    167 }}} 
    168  
    169 ############################################################################### 
    170  
    171 Project: "sample_debug"=".\sample_debug.dsp" - Package Owner=<4> 
    172  
    173 Package=<5> 
    174 {{{ 
    175 }}} 
    176  
    177 Package=<4> 
    178 {{{ 
    179     Begin Project Dependency 
    180     Project_Dep_Name pjlib 
    181     End Project Dependency 
    182     Begin Project Dependency 
    183     Project_Dep_Name pjlib_util 
    184     End Project Dependency 
    185     Begin Project Dependency 
    186     Project_Dep_Name pjmedia 
    187     End Project Dependency 
    188     Begin Project Dependency 
    189     Project_Dep_Name pjmedia_codec 
    190     End Project Dependency 
    191     Begin Project Dependency 
    192     Project_Dep_Name pjsip_core 
    193     End Project Dependency 
    194     Begin Project Dependency 
    195     Project_Dep_Name pjsip_simple 
    196     End Project Dependency 
    197     Begin Project Dependency 
    198     Project_Dep_Name pjsip_ua 
    199     End Project Dependency 
    200     Begin Project Dependency 
    201     Project_Dep_Name pjsua_lib 
    202     End Project Dependency 
    203 }}} 
    204  
    205 ############################################################################### 
    206  
    207 Project: "samples"=".\samples.dsp" - Package Owner=<4> 
    208  
    209 Package=<5> 
    210 {{{ 
    211 }}} 
    212  
    213 Package=<4> 
    214 {{{ 
    215     Begin Project Dependency 
    216     Project_Dep_Name pjlib 
    217     End Project Dependency 
    218     Begin Project Dependency 
    219     Project_Dep_Name pjlib_util 
    220     End Project Dependency 
    221     Begin Project Dependency 
    222     Project_Dep_Name pjmedia 
    223     End Project Dependency 
    224     Begin Project Dependency 
    225     Project_Dep_Name pjmedia_codec 
    226     End Project Dependency 
    227     Begin Project Dependency 
    228     Project_Dep_Name pjsip_core 
    229     End Project Dependency 
    230     Begin Project Dependency 
    231     Project_Dep_Name pjsip_simple 
    232     End Project Dependency 
    233     Begin Project Dependency 
    234     Project_Dep_Name pjsip_ua 
    235     End Project Dependency 
    236     Begin Project Dependency 
    237     Project_Dep_Name pjsua_lib 
    238     End Project Dependency 
    239 }}} 
    240  
    241 ############################################################################### 
    242  
    243210Global: 
    244211 
  • pjproject/trunk/pjsip-apps/build/sample_debug.dsp

    r371 r581  
    4343# PROP Target_Dir "" 
    4444# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c 
    45 # ADD CPP /nologo /MD /W3 /GX /O2 /I "../../pjsip/include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../../pjmedia/include" /D PJ_WIN32=1 /D PJ_M_I386=1 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c 
     45# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "../../pjsip/include" /I "../../pjlib/include" /I "../../pjlib-util/include" /I "../../pjmedia/include" /D PJ_WIN32=1 /D PJ_M_I386=1 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c 
     46# SUBTRACT CPP /YX 
    4647# ADD BASE RSC /l 0x409 /d "NDEBUG" 
    4748# ADD RSC /l 0x409 /d "NDEBUG" 
  • pjproject/trunk/pjsip-apps/src/samples/pjsip-perf.c

    r580 r581  
    6767#include <stdio.h> 
    6868 
    69 #define THIS_FILE       "pjsip-perf.c" 
    70 #define DEFAULT_COUNT   (PJSIP_MAX_TSX_COUNT/2>10000?10000:PJSIP_MAX_TSX_COUNT/2) 
    71 #define JOB_WINDOW      DEFAULT_COUNT 
     69#if defined(PJ_WIN32) && PJ_WIN32!=0 
     70#  include <windows.h> 
     71#endif 
     72 
     73#define THIS_FILE           "pjsip-perf.c" 
     74#define DEFAULT_COUNT       (PJSIP_MAX_TSX_COUNT/2>10000?10000:PJSIP_MAX_TSX_COUNT/2) 
     75#define JOB_WINDOW          DEFAULT_COUNT 
     76#define TERMINATE_TSX(x,c) 
     77 
     78 
     79#ifndef CACHING_POOL_SIZE 
     80#   define CACHING_POOL_SIZE   (256*1024*1024) 
     81#endif 
    7282 
    7383 
     
    139149                             job_finished, 
    140150                             job_window; 
     151        unsigned             stat_max_window; 
    141152        pj_time_val          first_request; 
    142153        pj_time_val          last_completion; 
     
    588599 
    589600    /* Must create a pool factory before we can allocate any memory. */ 
    590     pj_caching_pool_init(&app.cp, &pj_pool_factory_default_policy, 0); 
     601    pj_caching_pool_init(&app.cp, &pj_pool_factory_default_policy,  
     602                         CACHING_POOL_SIZE); 
    591603 
    592604    /* Create application pool for misc. */ 
     
    633645             
    634646            transport_type = "tcp"; 
    635             pj_sockaddr_in_init(&local_addr, 0, app.local_port); 
     647            pj_sockaddr_in_init(&local_addr, 0, (pj_uint16_t)app.local_port); 
    636648            status = pjsip_tcp_transport_start(app.sip_endpt, &local_addr, 
    637649                                               app.thread_count, &tpfactory); 
     
    976988        "   --stateless, -s         Set client to operate in stateless mode\n" 
    977989        "                           (default: stateful)\n" 
     990        "   --window=COUNT, -w      Set maximum outstanding job in client (default: %d)\n" 
    978991        "   --real-sdp              Generate real SDP from pjmedia, and also perform\n" 
    979992        "                           proper SDP negotiation (default: dummy)\n" 
     
    986999        "   - sip:1@server-addr     To handle requests statefully (INVITE and non-INVITE)\n" 
    9871000        "   - sip:2@server-addr     To handle INVITE call (INVITE only)\n", 
    988         DEFAULT_COUNT); 
     1001        DEFAULT_COUNT, JOB_WINDOW); 
    9891002} 
    9901003 
     
    10111024        { "verbose",        0, 0, 'v' }, 
    10121025        { "use-tcp",        0, 0, 'T' }, 
     1026        { "window",         1, 0, 'w' }, 
    10131027        { NULL, 0, 0, 0 }, 
    10141028    }; 
     
    10271041    /* Parse options */ 
    10281042    pj_optind = 0; 
    1029     while((c=pj_getopt_long(argc,argv, "p:c:m:t:hsv",  
     1043    while((c=pj_getopt_long(argc,argv, "p:c:m:t:w:hsv",  
    10301044                            long_options, &option_index))!=-1)  
    10311045    { 
     
    10911105            break; 
    10921106 
     1107        case 'w': 
     1108            app.client.job_window = my_atoi(pj_optarg); 
     1109            if (app.client.job_window <= 0) { 
     1110                PJ_LOG(3,(THIS_FILE, "Invalid --window %s", pj_optarg)); 
     1111                return -1; 
     1112            } 
     1113            break; 
     1114 
    10931115        case 'T': 
    10941116            app.use_tcp = PJ_TRUE; 
     
    11841206        tsx->mod_data[mod_test.id] = (void*)1; 
    11851207 
    1186         pjsip_tsx_terminate(tsx, tsx->status_code); 
     1208        TERMINATE_TSX(tsx, tsx->status_code); 
    11871209    } 
    11881210} 
     
    12201242static int client_thread(void *arg) 
    12211243{ 
     1244    unsigned last_timeout_check = 0; 
    12221245    pj_time_val end_time, now; 
    12231246 
     
    12401263        pj_status_t status; 
    12411264 
     1265        /* Calculate current outstanding job */ 
     1266        outstanding = app.client.job_submitted - app.client.job_finished; 
     1267 
     1268        /* Update stats on max outstanding jobs */ 
     1269        if (outstanding > (int)app.client.stat_max_window) 
     1270            app.client.stat_max_window = outstanding; 
     1271 
    12421272        /* Wait if there are more pending jobs than allowed in the 
    12431273         * window. 
    12441274         */ 
    1245         outstanding = app.client.job_submitted - app.client.job_finished; 
    1246         while (outstanding >= (int)app.client.job_window) { 
     1275        for (i=0; outstanding > (int)app.client.job_window && i<100; ++i) { 
    12471276            pjsip_endpt_handle_events(app.sip_endpt, &timeout); 
    12481277            outstanding = app.client.job_submitted - app.client.job_finished; 
    12491278        } 
    12501279 
     1280 
     1281        /* Submit one job */ 
    12511282        if (app.client.method.id == PJSIP_INVITE_METHOD) { 
    12521283            status = make_call(&app.client.dst_uri); 
     
    12591290        ++app.client.job_submitted; 
    12601291 
    1261         for (i=0; i<2; ++i) { 
    1262             unsigned cnt=0; 
    1263             pjsip_endpt_handle_events2(app.sip_endpt, &timeout, &cnt); 
    1264             if (cnt==0) 
     1292        /* Handle event */ 
     1293        pjsip_endpt_handle_events2(app.sip_endpt, &timeout, NULL); 
     1294 
     1295        /* Check for time out */ 
     1296        if (app.client.job_submitted - last_timeout_check >= 2000) { 
     1297            pj_gettimeofday(&now); 
     1298            if (PJ_TIME_VAL_GTE(now, end_time)) 
    12651299                break; 
     1300            last_timeout_check = app.client.job_submitted; 
    12661301        } 
    12671302    } 
     
    12721307        unsigned i; 
    12731308 
    1274         for (i=0; i<2; ++i) { 
    1275             unsigned cnt=0; 
    1276             pjsip_endpt_handle_events2(app.sip_endpt, &timeout, &cnt); 
    1277             if (cnt==0) 
    1278                 break; 
     1309        for (i=0; i<2000; ++i) { 
     1310            pjsip_endpt_handle_events2(app.sip_endpt, &timeout, NULL); 
    12791311        } 
    12801312 
     
    13531385                good_number(str_call, app.server.cur_state.call_cnt); 
    13541386 
    1355                 printf("Total(rate): stateless:%s (%d/s), statefull:%s (%d/s), call:%s (%d/s)\r", 
     1387                printf("Total(rate): stateless:%s (%d/s), statefull:%s (%d/s), call:%s (%d/s)       \r", 
    13561388                       str_stateless, stateless*1000/msec, 
    13571389                       str_stateful, stateful*1000/msec, 
     
    13671399} 
    13681400 
     1401static void write_report(const char *msg) 
     1402{ 
     1403    puts(msg); 
     1404 
     1405#if defined(PJ_WIN32) && PJ_WIN32!=0 
     1406    OutputDebugString(msg); 
     1407    OutputDebugString("\n"); 
     1408#endif 
     1409} 
     1410 
     1411 
    13691412int main(int argc, char *argv[]) 
    13701413{ 
     1414    static char report[1024]; 
    13711415 
    13721416    if (create_app() != 0) 
     
    14591503        if (msec == 0) msec = 1; 
    14601504 
    1461         printf("Total %d %s sent, %d responses received in %d msec:\n" 
    1462                " - 2xx responses:  %7d (rate=%d/sec)\n" 
    1463                " - 3xx responses:  %7d (rate=%d/sec)\n" 
    1464                " - 4xx responses:  %7d (rate=%d/sec)\n" 
    1465                " - 5xx responses:  %7d (rate=%d/sec)\n" 
    1466                " - 6xx responses:  %7d (rate=%d/sec)\n" 
    1467                " - 7xx responses:  %7d (rate=%d/sec)\n" 
    1468                "                       ----------------\n" 
    1469                " TOTAL responses:  %7d (rate=%d/sec)\n", 
    1470                app.client.job_submitted, test_type, 
    1471                app.client.total_responses, msec, 
    1472                app.client.status_class[2], app.client.status_class[2]*1000/msec, 
    1473                app.client.status_class[3], app.client.status_class[3]*1000/msec, 
    1474                app.client.status_class[4], app.client.status_class[4]*1000/msec, 
    1475                app.client.status_class[5], app.client.status_class[5]*1000/msec, 
    1476                app.client.status_class[6], app.client.status_class[6]*1000/msec, 
    1477                app.client.status_class[7], app.client.status_class[7]*1000/msec, 
    1478                app.client.total_responses, app.client.total_responses*1000/msec); 
     1505        pj_ansi_snprintf( 
     1506            report, sizeof(report), 
     1507            "Total %d %s sent, %d responses received in %d ms:\n" 
     1508            " - 2xx responses:  %7d (rate=%d/sec)\n" 
     1509            " - 3xx responses:  %7d (rate=%d/sec)\n" 
     1510            " - 4xx responses:  %7d (rate=%d/sec)\n" 
     1511            " - 5xx responses:  %7d (rate=%d/sec)\n" 
     1512            " - 6xx responses:  %7d (rate=%d/sec)\n" 
     1513            " - 7xx responses:  %7d (rate=%d/sec)\n" 
     1514            "                       ----------------\n" 
     1515            " TOTAL responses:  %7d (rate=%d/sec)\n", 
     1516            app.client.job_submitted, test_type, 
     1517            app.client.total_responses, msec, 
     1518            app.client.status_class[2], app.client.status_class[2]*1000/msec, 
     1519            app.client.status_class[3], app.client.status_class[3]*1000/msec, 
     1520            app.client.status_class[4], app.client.status_class[4]*1000/msec, 
     1521            app.client.status_class[5], app.client.status_class[5]*1000/msec, 
     1522            app.client.status_class[6], app.client.status_class[6]*1000/msec, 
     1523            app.client.status_class[7], app.client.status_class[7]*1000/msec, 
     1524            app.client.total_responses, app.client.total_responses*1000/msec); 
     1525 
     1526        write_report(report); 
     1527 
     1528        pj_ansi_sprintf(report, "Maximum outstanding job: %d",  
     1529                        app.client.stat_max_window); 
     1530        write_report(report); 
     1531 
    14791532 
    14801533    } else { 
  • pjproject/trunk/pjsip/include/pjsip/sip_config.h

    r520 r581  
    118118#ifndef PJSIP_MAX_PKT_LEN 
    119119#   define PJSIP_MAX_PKT_LEN            2000 
     120#endif 
     121 
     122 
     123/** 
     124 * Allow SIP modules removal or insertions during operation? 
     125 * If yes, then locking will be employed when endpoint need to 
     126 * access module. 
     127 */ 
     128#ifndef PJSIP_SAFE_MODULE 
     129#   define PJSIP_SAFE_MODULE            1 
    120130#endif 
    121131 
  • pjproject/trunk/pjsip/src/pjsip/sip_endpoint.c

    r561 r581  
    8989 
    9090 
     91#if defined(PJSIP_SAFE_MODULE) && PJSIP_SAFE_MODULE!=0 
     92#   define LOCK_MODULE_ACCESS(ept)      pj_rwmutex_lock_read(ept->mod_mutex) 
     93#   define UNLOCK_MODULE_ACCESS(ept)    pj_rwmutex_unlock_read(ept->mod_mutex) 
     94#else 
     95#   define LOCK_MODULE_ACCESS(endpt) 
     96#   define UNLOCK_MODULE_ACCESS(endpt) 
     97#endif 
     98 
     99 
    91100 
    92101/* 
     
    582591    PJ_LOG(6, (THIS_FILE, "Releasing pool %s", pj_pool_getobjname(pool))); 
    583592 
    584     pj_mutex_lock(endpt->mutex); 
     593    /* Don't need to acquire mutex since pool factory is thread safe 
     594       pj_mutex_lock(endpt->mutex); 
     595     */ 
    585596    pj_pool_release( pool ); 
     597 
     598    /* 
    586599    pj_mutex_unlock(endpt->mutex); 
     600     */ 
    587601} 
    588602 
     
    777791 
    778792    /* Distribute to modules, starting from modules with highest priority */ 
    779     pj_rwmutex_lock_read(endpt->mod_mutex); 
     793    LOCK_MODULE_ACCESS(endpt); 
    780794 
    781795    if (msg->type == PJSIP_REQUEST_MSG) { 
     
    824838    } 
    825839 
    826     pj_rwmutex_unlock_read(endpt->mod_mutex); 
     840    UNLOCK_MODULE_ACCESS(endpt); 
    827841 
    828842    /* Must clear mod_data before returning rdata to transport, since 
     
    843857 
    844858    /* Distribute to modules, starting from modules with LOWEST priority */ 
    845     pj_rwmutex_lock_read(endpt->mod_mutex); 
     859    LOCK_MODULE_ACCESS(endpt); 
    846860 
    847861    mod = endpt->module_list.prev; 
     
    865879    } 
    866880 
    867     pj_rwmutex_unlock_read(endpt->mod_mutex); 
     881    UNLOCK_MODULE_ACCESS(endpt); 
    868882 
    869883    return status; 
Note: See TracChangeset for help on using the changeset viewer.