diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-02-13 15:17:28 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-02-13 15:17:28 +0000 |
commit | 379f21d67f143af70c85fd9ef2af67cc87d150e3 (patch) | |
tree | 4b20c85bf30f3d7aebbd94a3ef529e7ae9f42f59 /pjlib/src/pjlib-test/ioq_tcp.c | |
parent | a2ca31f0f6e30a30bf6f6e58ab423b370fbc9bb3 (diff) |
Ticket #474: option in ioqueue to control concurrency (to allow/disallow simultaneous/multiple callback calls)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1789 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pjlib-test/ioq_tcp.c')
-rw-r--r-- | pjlib/src/pjlib-test/ioq_tcp.c | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/pjlib/src/pjlib-test/ioq_tcp.c b/pjlib/src/pjlib-test/ioq_tcp.c index c6e117db..106a9645 100644 --- a/pjlib/src/pjlib-test/ioq_tcp.c +++ b/pjlib/src/pjlib-test/ioq_tcp.c @@ -232,7 +232,7 @@ static int send_recv_test(pj_ioqueue_t *ioque, /* * Compliance test for success scenario. */ -static int compliance_test_0(void) +static int compliance_test_0(pj_bool_t allow_concur) { pj_sock_t ssock=-1, csock0=-1, csock1=-1; pj_sockaddr_in addr, client_addr, rmt_addr; @@ -292,6 +292,13 @@ static int compliance_test_0(void) status=-20; goto on_error; } + // Concurrency + rc = pj_ioqueue_set_default_concurrency(ioque, allow_concur); + if (rc != PJ_SUCCESS) { + app_perror("...ERROR in pj_ioqueue_set_default_concurrency()", rc); + status=-21; goto on_error; + } + // Register server socket and client socket. rc = pj_ioqueue_register_sock(pool, ioque, ssock, NULL, &test_cb, &skey); if (rc == PJ_SUCCESS) @@ -458,7 +465,7 @@ on_error: * Compliance test for failed scenario. * In this case, the client connects to a non-existant service. */ -static int compliance_test_1(void) +static int compliance_test_1(pj_bool_t allow_concur) { pj_sock_t csock1=PJ_INVALID_SOCKET; pj_sockaddr_in addr; @@ -479,6 +486,12 @@ static int compliance_test_1(void) status=-20; goto on_error; } + // Concurrency + rc = pj_ioqueue_set_default_concurrency(ioque, allow_concur); + if (rc != PJ_SUCCESS) { + status=-21; goto on_error; + } + // Create client socket rc = pj_sock_socket(pj_AF_INET(), pj_SOCK_STREAM(), 0, &csock1); if (rc != PJ_SUCCESS) { @@ -581,7 +594,7 @@ on_error: /* * Repeated connect/accept on the same listener socket. */ -static int compliance_test_2(void) +static int compliance_test_2(pj_bool_t allow_concur) { #if defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0 enum { MAX_PAIR = 1, TEST_LOOP = 2 }; @@ -648,6 +661,13 @@ static int compliance_test_2(void) } + // Concurrency + rc = pj_ioqueue_set_default_concurrency(ioque, allow_concur); + if (rc != PJ_SUCCESS) { + app_perror("...ERROR in pj_ioqueue_set_default_concurrency()", rc); + return -11; + } + // Allocate buffers for send and receive. send_buf = (char*)pj_pool_alloc(pool, bufsize); recv_buf = (char*)pj_pool_alloc(pool, bufsize); @@ -887,26 +907,28 @@ on_error: } -int tcp_ioqueue_test() +static int tcp_ioqueue_test_impl(pj_bool_t allow_concur) { int status; + PJ_LOG(3,(THIS_FILE, "..testing with concurency=%d", allow_concur)); + PJ_LOG(3, (THIS_FILE, "..%s compliance test 0 (success scenario)", pj_ioqueue_name())); - if ((status=compliance_test_0()) != 0) { + if ((status=compliance_test_0(allow_concur)) != 0) { PJ_LOG(1, (THIS_FILE, "....FAILED (status=%d)\n", status)); return status; } PJ_LOG(3, (THIS_FILE, "..%s compliance test 1 (failed scenario)", pj_ioqueue_name())); - if ((status=compliance_test_1()) != 0) { + if ((status=compliance_test_1(allow_concur)) != 0) { PJ_LOG(1, (THIS_FILE, "....FAILED (status=%d)\n", status)); return status; } PJ_LOG(3, (THIS_FILE, "..%s compliance test 2 (repeated accept)", pj_ioqueue_name())); - if ((status=compliance_test_2()) != 0) { + if ((status=compliance_test_2(allow_concur)) != 0) { PJ_LOG(1, (THIS_FILE, "....FAILED (status=%d)\n", status)); return status; } @@ -914,6 +936,21 @@ int tcp_ioqueue_test() return 0; } +int tcp_ioqueue_test() +{ + int rc; + + rc = tcp_ioqueue_test_impl(PJ_TRUE); + if (rc != 0) + return rc; + + rc = tcp_ioqueue_test_impl(PJ_FALSE); + if (rc != 0) + return rc; + + return 0; +} + #endif /* PJ_HAS_TCP */ |