Changeset 248 for trunk/src/slib.c


Ignore:
Timestamp:
Sep 21, 2009, 8:23:56 PM (15 years ago)
Author:
katerina
Message:

Code to track down originating site for ticket #163.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/slib.c

    r247 r248  
    15571557
    15581558typedef struct openfiles {
    1559   SL_TICKET ticket;     /* The unique  ID.      */
    1560   int fd;               /* The file descriptor. */
    1561   char * path;          /* The file path.       */
    1562   int flush;            /* Whether we want to flush the cache */
    1563   sh_string * content;  /* The file content     */
     1559  SL_TICKET ticket;          /* The unique  ID.      */
     1560  int fd;                    /* The file descriptor. */
     1561  char * path;               /* The file path.       */
     1562  int flush;                 /* Whether we want to flush the cache */
     1563  char ofile[SL_OFILE_SIZE]; /* origin file */
     1564  int  oline;                /* origin line */
     1565  sh_string * content;       /* The file content     */
    15641566} SL_OFILE;
    15651567
    15661568static SL_OFILE * ofiles[MAXFD];
    15671569
     1570static char stale_orig_file[64] = { '\0' };
     1571static int  stale_orig_line = -1;
     1572static char stale_orig_mesg[128];
     1573
    15681574SH_MUTEX_STATIC(mutex_ticket, PTHREAD_MUTEX_INITIALIZER);
    15691575
    15701576static unsigned int nonce_counter = TOFFSET;
     1577
     1578char * sl_check_stale()
     1579{
     1580  if (stale_orig_line == -1)
     1581    return NULL;
     1582  sl_snprintf(stale_orig_mesg, sizeof(stale_orig_mesg),
     1583              _("stale handle, %s, %d"), stale_orig_file, stale_orig_line);
     1584  stale_orig_file[0] = '\0';
     1585  stale_orig_line    = -1;
     1586  return stale_orig_mesg;
     1587}
    15711588
    15721589static
     
    16481665}
    16491666
    1650 SL_TICKET sl_make_ticket (int fd, const char * filename)
     1667SL_TICKET sl_make_ticket (const char * ofile, int oline,
     1668                          int fd, const char * filename)
    16511669{
    16521670  size_t    len;
     
    16601678     }
    16611679
    1662    if (ofiles[fd] != NULL)
    1663     {
    1664       SL_IRETURN(SL_EINTERNAL06, _("sl_make_ticket"));
     1680  if (ofiles[fd] != NULL) /* stale entry */
     1681    {
     1682      /* SL_IRETURN(SL_EINTERNAL06, _("sl_make_ticket")); */
     1683      sl_strlcpy(stale_orig_file, ofiles[fd]->ofile, sizeof(stale_orig_file));
     1684      stale_orig_line = ofiles[fd]->oline;
     1685
     1686      if (ofiles[fd]->content)
     1687        sh_string_destroy(&(ofiles[fd]->content));
     1688      (void) free (ofiles[fd]->path);
     1689      (void) free (ofiles[fd]);
     1690      ofiles[fd] = NULL;
    16651691    }
    16661692
     
    16961722  ofiles[fd]->content = NULL;
    16971723  ofiles[fd]->flush   = SL_FALSE;
     1724
     1725  sl_strlcpy(ofiles[fd]->ofile, ofile, SL_OFILE_SIZE);
     1726  ofiles[fd]->oline = oline;
    16981727
    16991728  SL_IRETURN(ticket, _("sl_make_ticket"));
     
    17261755
    17271756static
    1728 int sl_open_file (const char *filename, int mode, int priv)
     1757int sl_open_file (const char * ofile, int oline,
     1758                  const char *filename, int mode, int priv)
    17291759{
    17301760  struct stat   lbuf;
     
    19201950     }
    19211951
    1922    if (ofiles[fd] != NULL)
    1923     {
     1952  if (ofiles[fd] != NULL) /* stale entry */
     1953    {
     1954      /*
    19241955      close(fd);
    19251956      SL_IRETURN(SL_EINTERNAL09, _("sl_open_file"));
     1957      */
     1958      sl_strlcpy(stale_orig_file, ofiles[fd]->ofile, sizeof(stale_orig_file));
     1959      stale_orig_line = ofiles[fd]->oline;
     1960
     1961      if (ofiles[fd]->content)
     1962        sh_string_destroy(&(ofiles[fd]->content));
     1963      (void) free (ofiles[fd]->path);
     1964      (void) free (ofiles[fd]);
     1965      ofiles[fd] = NULL;
    19261966    }
    19271967
     
    19612001  ofiles[fd]->flush   = SL_FALSE;
    19622002
     2003  sl_strlcpy(ofiles[fd]->ofile, ofile, SL_OFILE_SIZE);
     2004  ofiles[fd]->oline = oline;
     2005
    19632006  SL_IRETURN(ticket, _("sl_open_file"));
    19642007}
     
    19712014    return (fd);
    19722015
    1973   if (ofiles[fd] == NULL || fd != ofiles[fd]->fd || fd < 0)
     2016  if (ofiles[fd] == NULL || fd != ofiles[fd]->fd ||
     2017      ticket != ofiles[fd]->ticket || fd < 0)
    19742018    return (SL_EINTERNAL10);
     2019
    19752020  return (fd);
    19762021}
     
    19872032}
    19882033 
    1989 SL_TICKET sl_open_write (const char * fname, int priv)
     2034SL_TICKET sl_open_write (const char * ofile, int oline,
     2035                         const char * fname, int priv)
    19902036{
    19912037  long status;
     
    19952041    SL_IRETURN(status, _("sl_open_write"));
    19962042
    1997   status = sl_open_file(fname, SL_OPEN_FOR_WRITE, priv);
     2043  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_WRITE, priv);
    19982044  SL_IRETURN(status, _("sl_open_write"));
    19992045}
    20002046
    2001 SL_TICKET sl_open_read (const char * fname, int priv)
     2047SL_TICKET sl_open_read (const char * ofile, int oline,
     2048                        const char * fname, int priv)
    20022049{
    20032050  long status;
     
    20122059    }
    20132060
    2014   status = sl_open_file(fname, SL_OPEN_FOR_READ, priv);
     2061  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_READ, priv);
    20152062  SL_IRETURN(status, _("sl_open_read"));
    20162063}
     
    20672114}
    20682115
    2069 SL_TICKET sl_open_fastread (const char * fname, int priv)
     2116SL_TICKET sl_open_fastread (const char * ofile, int oline,
     2117                            const char * fname, int priv)
    20702118{
    20712119  long status;
     
    20752123    SL_IRETURN(status, _("sl_open_read"));
    20762124
    2077   status = sl_open_file(fname, SL_OPEN_FOR_FASTREAD, priv);
     2125  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_FASTREAD, priv);
    20782126
    20792127#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_MINCORE) && defined(POSIX_FADV_DONTNEED)
     
    20942142}
    20952143
    2096 SL_TICKET sl_open_rdwr (const char * fname, int priv)
     2144SL_TICKET sl_open_rdwr (const char * ofile, int oline,
     2145                        const char * fname, int priv)
    20972146{
    20982147  long status;
     
    21022151    SL_IRETURN(status, _("sl_open_rdwr"));
    21032152
    2104   status = sl_open_file(fname, SL_OPEN_FOR_RDWR, priv);
     2153  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_RDWR, priv);
    21052154  SL_IRETURN(status, _("sl_open_rdwr"));
    21062155}
    21072156
    2108 SL_TICKET sl_open_safe_rdwr (const char * fname, int priv)
     2157SL_TICKET sl_open_safe_rdwr (const char * ofile, int oline,
     2158                             const char * fname, int priv)
    21092159{
    21102160  long status;
     
    21142164    SL_IRETURN(status, _("sl_open_safe_rdwr"));
    21152165
    2116   status = sl_open_file(fname, SL_OPEN_SAFE_RDWR, priv);
     2166  status = sl_open_file(ofile, oline, fname, SL_OPEN_SAFE_RDWR, priv);
    21172167  SL_IRETURN(status, _("sl_open_safe_rdwr"));
    21182168}
    21192169
    2120 SL_TICKET sl_open_write_trunc (const char * fname, int priv)
     2170SL_TICKET sl_open_write_trunc (const char * ofile, int oline,
     2171                               const char * fname, int priv)
    21212172{
    21222173  long status;
     
    21262177    SL_IRETURN(status, _("sl_open_write_trunc"));
    21272178
    2128   status = sl_open_file(fname, SL_OPEN_FOR_WTRUNC, priv);
     2179  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_WTRUNC, priv);
    21292180  SL_IRETURN(status, _("sl_open_write_trunc"));
    21302181}
    21312182
    2132 SL_TICKET sl_open_rdwr_trunc (const char * fname, int priv)
     2183SL_TICKET sl_open_rdwr_trunc (const char * ofile, int oline,
     2184                              const char * fname, int priv)
    21332185{
    21342186  long status;
     
    21382190    SL_IRETURN(status, _("sl_open_rdwr_trunc"));
    21392191
    2140   status = sl_open_file(fname, SL_OPEN_FOR_RWTRUNC, priv);
     2192  status = sl_open_file(ofile, oline, fname, SL_OPEN_FOR_RWTRUNC, priv);
    21412193  SL_IRETURN(status, _("sl_open_rdwr_trunc"));
    21422194}
     
    21502202    return (fd);
    21512203
    2152   if (ofiles[fd] == NULL || fd != ofiles[fd]->fd || fd < 0)
     2204  if (ofiles[fd] == NULL || fd != ofiles[fd]->fd ||
     2205      ticket != ofiles[fd]->ticket || fd < 0)
    21532206    return (SL_EINTERNAL12);
    21542207
     
    21672220    return (NULL);
    21682221
    2169   if (ofiles[fd] == NULL || fd != ofiles[fd]->fd || fd < 0)
     2222  if (ofiles[fd] == NULL || fd != ofiles[fd]->fd ||
     2223      ticket != ofiles[fd]->ticket || fd < 0)
    21702224    return (NULL);
    21712225
Note: See TracChangeset for help on using the changeset viewer.