- Update tet_receiver() to poll without timeout as sender may
take long time for sendto() return due to run out of memory.
- Update tet_sender() to slow down sending if amount of message
is big and message size is big to avoid kernel kill it as memory
usage too much.
---
 src/mds/apitest/mdstipc_api.c | 36 ++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c
index 3dd1a3dc0..6ce3b7103 100644
--- a/src/mds/apitest/mdstipc_api.c
+++ b/src/mds/apitest/mdstipc_api.c
@@ -13340,6 +13340,10 @@ void tet_sender2(MDS_SVC_ID svc_id, uint32_t msg_num, 
uint32_t msg_size,
                }
        }
        free(mesg);
+       while (1) {
+               // Receiver will kill sender
+               sleep(1);
+       }
 }
 
 void tet_sender(MDS_SVC_ID svc_id, uint32_t msg_num, uint32_t msg_size,
@@ -13413,6 +13417,8 @@ void tet_sender(MDS_SVC_ID svc_id, uint32_t msg_num, 
uint32_t msg_size,
                                        " successfully\n", i);
                        }
                }
+               if (msg_num > 65535 && msg_size > 10000)
+                       usleep(1000); // Slow down to avoid reaped by OOM killer
        }
        free(mesg);
        while (1) {
@@ -13426,15 +13432,17 @@ int tet_receiver(MDS_SVC_ID svc_id, uint32_t msg_num,
                                uint32_t msg_size, int svc_num,
                                MDS_SVC_ID fr_svcids[])
 {
+       int rc = 1;
+
        if (msg_size > TET_MSG_SIZE_MIN) {
                printf("\nReceiver: msg_size > TET_MSG_SIZE_MIN\n");
-               return 1;
+               return rc;
        }
        printf("\nStarted Receiver (pid:%d) svc_id=%d\n",
                        (int)getpid(), svc_id);
        if (adest_get_handle() != NCSCC_RC_SUCCESS) {
                printf("\nReceiver FAIL to get adest handle\n");
-               return 1;
+               return rc;
        }
 
        sleep(1); //Let sender subscribe before receiver install
@@ -13449,7 +13457,7 @@ int tet_receiver(MDS_SVC_ID svc_id, uint32_t msg_num,
                NCSMDS_SCOPE_INTRANODE,
                svc_num, fr_svcids) != NCSCC_RC_SUCCESS) {
                printf("\nReceiver FAIL to subscribe sender\n");
-               exit(1);
+               return rc;
        }
 
        struct pollfd sel;
@@ -13459,7 +13467,7 @@ int tet_receiver(MDS_SVC_ID svc_id, uint32_t msg_num,
        sel.fd = m_GET_FD_FROM_SEL_OBJ(gl_tet_adest.svc[0].sel_obj);
        sel.events = POLLIN;
        while (1) {
-               int ret = osaf_poll(&sel, 1, 10000);
+               int ret = osaf_poll(&sel, 1, 1000);
                if (ret > 0) {
                        gl_rcvdmsginfo.msg = NULL;
                        if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl,
@@ -13479,31 +13487,25 @@ int tet_receiver(MDS_SVC_ID svc_id, uint32_t msg_num,
                                                " from %x\n", expected_buff,
                                                        msg->recvd_data,
                                                        gl_rcvdmsginfo.fr_dest);
-                                       free(expected_buff);
                                        free(msg);
-                                       reset_counters();
-                                       return 1;
+                                       break;
                                }
                                free(msg);
+                       } else if (gl_event_data.event == NCSMDS_DOWN) {
+                               break;
                        }
-               } else {
+               } else if (verify_counters(msg_num)) {
+                       printf("\nReceiver: get enough %d messages\n", msg_num);
+                       rc = 0;
                        break;
                }
        }
 
-       printf("\nReceiver verify number of received messages\n");
-       if (!verify_counters(msg_num)) {
-               printf("\nReceiver: Not get enough %d messages\n", msg_num);
-               free(expected_buff);
-               reset_counters();
-               return 1;
-       }
-
        printf("\nEnd Receiver (pid:%d) svc_id=%d\n",
                        (int)getpid(), svc_id);
        free(expected_buff);
        reset_counters();
-       return 0;
+       return rc;
 }
 
 void tet_overload_tp_1(void)
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to