Remove hash_destroy calls in hash_create's failure paths. As noted by
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 14 Aug 2006 12:39:55 +0000 (12:39 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 14 Aug 2006 12:39:55 +0000 (12:39 +0000)
a Coverity warning, these are risky since the hashtable isn't necessarily
fully set up yet.  They're unnecessary anyway: a deletable hashtable
should be in a memory context that will be cleared following elog(ERROR).
Per report from Martijn van Oosterhout.

src/backend/utils/hash/dynahash.c

index a4c07ea3d2ce43b6b2937fe7611e6cb21c715ffe..99e419c241bed6ed8b5a98727d6e11ca5f4085d3 100644 (file)
@@ -392,10 +392,7 @@ hash_create(const char *tabname, long nelem, HASHCTL *info, int flags)
 
        /* Build the hash directory structure */
        if (!init_htab(hashp, nelem))
-       {
-               hash_destroy(hashp);
                elog(ERROR, "failed to initialize hash table");
-       }
 
        /*
         * For a shared hash table, preallocate the requested number of elements.
@@ -409,12 +406,9 @@ hash_create(const char *tabname, long nelem, HASHCTL *info, int flags)
                nelem < hctl->nelem_alloc)
        {
                if (!element_alloc(hashp, (int) nelem))
-               {
-                       hash_destroy(hashp);
                        ereport(ERROR,
                                        (errcode(ERRCODE_OUT_OF_MEMORY),
                                         errmsg("out of memory")));
-               }
        }
 
        return hashp;