summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-09-19 21:29:19 +0000
committerBenny Prijono <bennylp@teluu.com>2006-09-19 21:29:19 +0000
commiteba3cc35db92c66e1d99180060a02d008c68f7ca (patch)
tree823e081d2893ec238c2600b985d5e06b92cd5a70
parent4b188d682a36a7fa454884ca55b5cf5a7bad069c (diff)
Fixed race condition bug when initializing SDP parser on multi-processor machine
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@730 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/sdp.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/pjmedia/src/pjmedia/sdp.c b/pjmedia/src/pjmedia/sdp.c
index 11ae3a25..0820b514 100644
--- a/pjmedia/src/pjmedia/sdp.c
+++ b/pjmedia/src/pjmedia/sdp.c
@@ -71,13 +71,16 @@ static pj_cis_t cs_digit, cs_token;
static void init_sdp_parser(void)
{
- if (is_initialized == 0) {
- is_initialized = 1;
- if (is_initialized != 1) {
- return;
- }
- }
+ if (is_initialized != 0)
+ return;
+
+ pj_enter_critical_section();
+ if (is_initialized != 0) {
+ pj_leave_critical_section();
+ return;
+ }
+
pj_cis_buf_init(&cis_buf);
pj_cis_init(&cis_buf, &cs_token);
@@ -87,6 +90,9 @@ static void init_sdp_parser(void)
pj_cis_init(&cis_buf, &cs_digit);
pj_cis_add_num(&cs_digit);
+
+ is_initialized = 1;
+ pj_leave_critical_section();
}
PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_attr_create( pj_pool_t *pool,
@@ -1114,6 +1120,7 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
session = NULL;
+ pj_assert(ctx.last_error == PJ_SUCCESS);
}
PJ_END;