Free resources on failure.
authordrepper <drepper>
Wed, 22 Aug 2001 16:58:57 +0000 (16:58 +0000)
committerdrepper <drepper>
Wed, 22 Aug 2001 16:58:57 +0000 (16:58 +0000)
sunrpc/auth_unix.c
sunrpc/svc_tcp.c
sunrpc/svc_udp.c
sunrpc/svc_unix.c

index 50f9551..bcfa0c9 100644 (file)
@@ -108,6 +108,7 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len,
   au = (struct audata *) mem_alloc (sizeof (*au));
   if (auth == NULL || au == NULL)
     {
+no_memory:
 #ifdef USE_IN_LIBIO
       if (_IO_fwide (stderr, 0) > 0)
        (void) __fwprintf (stderr, L"%s",
@@ -115,6 +116,8 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len,
       else
 #endif
        (void) fputs (_("authunix_create: out of memory\n"), stderr);
+      mem_free (auth, sizeof (*auth));
+      mem_free (au, sizeof (*au));
       return NULL;
     }
   auth->ah_ops = &auth_unix_ops;
@@ -143,16 +146,7 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len,
   au->au_origcred.oa_flavor = AUTH_UNIX;
   au->au_origcred.oa_base = mem_alloc ((u_int) len);
   if (au->au_origcred.oa_base == NULL)
-    {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-       (void) __fwprintf (stderr, L"%s",
-                          _("authunix_create: out of memory\n"));
-      else
-#endif
-       (void) fputs (_("authunix_create: out of memory\n"), stderr);
-      return NULL;
-    }
+    goto no_memory;
   memcpy(au->au_origcred.oa_base, mymem, (u_int) len);
 
   /*
index 2fffdf5..cda2484 100644 (file)
@@ -183,6 +183,8 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize)
       else
 #endif
        (void) fputs (_("svctcp_create: out of memory\n"), stderr);
+      mem_free (r, sizeof (*r));
+      mem_free (xprt, sizeof (SVCXPRT));
       return NULL;
     }
   r->sendsize = sendsize;
@@ -225,6 +227,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize)
       else
 #endif
        (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
+      mem_free (xprt, sizeof (SVCXPRT));
+      mem_free (cd, sizeof (struct tcp_conn));
       return NULL;
     }
   cd->strm_stat = XPRT_IDLE;
index f8ea76c..17c4977 100644 (file)
@@ -156,6 +156,9 @@ svcudp_bufcreate (sock, sendsz, recvsz)
       else
 #endif
        (void) fputs (_("svcudp_create: out of memory\n"), stderr);
+      mem_free (xprt, sizeof (SVCXPRT));
+      mem_free (su, sizeof (*su));
+      mem_free (buf, ((MAX (sendsz, recvsz) + 3) / 4) * 4);
       return NULL;
     }
   su->su_iosz = ((MAX (sendsz, recvsz) + 3) / 4) * 4;
index 99e5a2a..72bc9c2 100644 (file)
@@ -179,6 +179,8 @@ svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path)
       else
 #endif
        fputs (_("svcunix_create: out of memory\n"), stderr);
+      mem_free (r, sizeof (*r));
+      mem_free (xprt, sizeof (SVCXPRT));
       return NULL;
     }
   r->sendsize = sendsize;
@@ -221,6 +223,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize)
       else
 #endif
        (void) fputs (_("svc_unix: makefd_xprt: out of memory\n"), stderr);
+      mem_free (xprt, sizeof (SVCXPRT));
+      mem_free (cd, sizeof (struct unix_conn));
       return NULL;
     }
   cd->strm_stat = XPRT_IDLE;