pv 968773, author Chris Pascoe <c.pascoe@itee.uq.edu.au>, rv vapo - minor fixes for...
[xfstests-dev.git] / dmapi / src / suite2 / src / dm_test_daemon.c
index e47cad2a699f1e7d03c0e1d70071fb898c88647f..214750aa1f5e3e26cde9e176fec735bb28cce921 100644 (file)
@@ -1171,7 +1171,7 @@ finish_responding(
 {
   int          error = 0;
   u_int                nbytes, ntokens = 0, ret_ntokens, i;
-  dm_token_t   *tokenbuf = NULL;
+  dm_token_t   *tokenbuf = NULL, *tokenptr;
   size_t       buflen, ret_buflen;
   char         *msgbuf = NULL;
   dm_eventmsg_t        *msg;
@@ -1193,14 +1193,16 @@ finish_responding(
    * If we're already using the returned size, double it and try again.
    */
   do {
+    dm_token_t *tmpbuf;
     ntokens = (ntokens != ret_ntokens) ? ret_ntokens : ntokens*2;
     nbytes = ntokens * (sizeof(dm_token_t) + sizeof(dm_vardata_t));
-    tokenbuf = malloc(nbytes);
-    if (tokenbuf == NULL) {
+    tmpbuf = realloc(tokenbuf, nbytes);
+    if (tmpbuf == NULL) {
       err_msg("Can't malloc %d bytes for tokenbuf\n", nbytes);
       error = 1;
       goto out;
     }
+    tokenbuf = tmpbuf;
     error = dm_getall_tokens(sid, ntokens, tokenbuf, &ret_ntokens);
   } while (error && errno == E2BIG);
 
@@ -1209,25 +1211,28 @@ finish_responding(
     goto out;
   }
 
+  tokenptr = tokenbuf;
   for (i = 0; i < ret_ntokens; i++) {
     if (Verbose)
-      err_msg("Responding to outstanding event for token %d\n",(int)*tokenbuf);
+      err_msg("Responding to outstanding event for token %d\n",(int)*tokenptr);
 
     /*
      * The E2BIG dance reprise...
      */
     do {
+      char *tmpbuf;
       buflen = (buflen != ret_buflen) ? ret_buflen : buflen * 2;
-      msgbuf = malloc(buflen);
-      if (msgbuf == NULL) {
+      tmpbuf = realloc(msgbuf, buflen);
+      if (tmpbuf == NULL) {
        err_msg("Can't malloc %d bytes for msgbuf\n", buflen);
        error = 1;
        goto out;
       }
-      error = dm_find_eventmsg(sid, *tokenbuf, buflen, msgbuf, &ret_buflen);
+      msgbuf = tmpbuf;
+      error = dm_find_eventmsg(sid, *tokenptr, buflen, msgbuf, &ret_buflen);
     } while (error && errno == E2BIG);
     if (error) {
-      errno_msg("Can't find the event message for token %d", (int)*tokenbuf);
+      errno_msg("Can't find the event message for token %d", (int)*tokenptr);
       goto out;
     }
 
@@ -1239,7 +1244,7 @@ finish_responding(
       msg = DM_STEP_TO_NEXT(msg, dm_eventmsg_t *);
     }
 
-    tokenbuf++;
+    tokenptr++;
   }
 
  out: