Changeset 247 for trunk/src/slib.c


Ignore:
Timestamp:
Sep 17, 2009, 10:22:48 PM (15 years ago)
Author:
katerina
Message:

Fix a race condition that might have caused ticket #163.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/slib.c

    r243 r247  
    16741674  if ( (ofiles[fd]->path = (char *) malloc(len) ) == NULL)
    16751675    {
    1676       free(ofiles[fd]);
     1676      free (ofiles[fd]);
    16771677      ofiles[fd] = NULL;
    16781678      SL_IRETURN(SL_EMEM, _("sl_make_ticket"));
     
    16871687      (void) free (ofiles[fd]->path);
    16881688      (void) free (ofiles[fd]);
     1689      ofiles[fd] = NULL;
    16891690      SL_IRETURN(ticket, _("sl_make_ticket"));
    16901691    }
     
    19351936  if ( (ofiles[fd]->path = (char *) malloc(len) ) == NULL)
    19361937    {
    1937       free(ofiles[fd]);
     1938      free (ofiles[fd]);
    19381939      ofiles[fd] = NULL;
    19391940      close(fd);
     
    19491950      (void) free (ofiles[fd]->path);
    19501951      (void) free (ofiles[fd]);
     1952      ofiles[fd] = NULL;
    19511953      close(fd);
    19521954      SL_IRETURN(ticket, _("sl_open_file"));
     
    22092211    SL_IRETURN(fd, _("sl_close"));
    22102212
     2213  if (ofiles[fd] != NULL)
     2214    {
    22112215#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_MINCORE) && defined(POSIX_FADV_DONTNEED)
    2212 
    2213   if (ofiles[fd]->flush == SL_TRUE)
    2214     {
    2215       posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
    2216     }
    2217 
    2218 #endif
     2216      if (ofiles[fd]->flush == SL_TRUE)
     2217        {
     2218          posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
     2219        }
     2220#endif
     2221      if (ofiles[fd]->content)
     2222        sh_string_destroy(&(ofiles[fd]->content));
     2223      (void) free (ofiles[fd]->path);
     2224      (void) free (ofiles[fd]);
     2225      ofiles[fd] = NULL;
     2226    }
    22192227
    22202228  /* This may fail, but what to do then ?
    22212229   */
    2222   if (0 != close(fd) && ofiles[fd] != NULL)
     2230  if (0 != close(fd))
    22232231    {
    22242232      TPT((0, FIL__, __LINE__,
    2225            _("msg=<Error closing file.>, path=<%s>, fd=<%d>, err=<%s>\n"),
    2226            ofiles[fd]->path, fd, strerror(errno)));
    2227     }
    2228 
    2229   if (ofiles[fd] != NULL)
    2230     {
    2231       if (ofiles[fd]->content)
    2232         sh_string_destroy(&(ofiles[fd]->content));
    2233       (void) free(ofiles[fd]->path);
    2234       (void) free(ofiles[fd]);
    2235       ofiles[fd] = NULL;
     2233           _("msg=<Error closing file.>, fd=<%d>, err=<%s>\n"),
     2234           fd, strerror(errno)));
    22362235    }
    22372236
     
    22482247            sh_string_destroy(&(ofiles[fd]->content));
    22492248          if (ofiles[fd]->path != NULL)
    2250             (void) free(ofiles[fd]->path);
    2251           (void) free(ofiles[fd]);
     2249            (void) free (ofiles[fd]->path);
     2250          (void) free (ofiles[fd]);
    22522251          ofiles[fd] = NULL;
    22532252        }
Note: See TracChangeset for help on using the changeset viewer.