Changeset 252 for trunk/src/sh_unix.c


Ignore:
Timestamp:
Oct 12, 2009, 10:40:45 AM (15 years ago)
Author:
katerina
Message:

Add code to check for stale file records on close() and fclose(), fix sl_close() to handle open stream (ticket #163).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_unix.c

    r251 r252  
    12931293        fd++;
    12941294      else
    1295         close(fd++);
     1295        sl_close_fd(FIL__, __LINE__, fd++);
    12961296    }
    12971297
     
    19711971      /* Close first tree file descriptors
    19721972       */
    1973       close (0);  /* if running as daemon */
    1974       close (1);  /* if running as daemon */
    1975       close (2);  /* if running as daemon */
     1973      sl_close_fd (FIL__, __LINE__, 0);  /* if running as daemon */
     1974      sl_close_fd (FIL__, __LINE__, 1);  /* if running as daemon */
     1975      sl_close_fd (FIL__, __LINE__, 2);  /* if running as daemon */
    19761976
    19771977      /* Enable full error logging
     
    23062306                                   _("time"), sh.srvtime.name);
    23072307                }
    2308               close(fd);
     2308              sl_close_fd(FIL__, __LINE__, fd);
    23092309            }
    23102310          else
     
    29102910 
    29112911  r = ioctl (fd, EXT2_IOC_GETFLAGS, &f);
    2912   /* close (fd); */
     2912  /* sl_close_fd (FIL__, __LINE__, fd); */
    29132913
    29142914  if (r == -1)
     
    34393439  int           fstat_return;
    34403440  int           fstat_errno = 0;
     3441  int           try         = 0;
    34413442
    34423443  sh_string   * content = NULL;
     
    34643465    stat_errno = errno;
    34653466
     3467  theFile->link_path = NULL;
     3468
     3469 try_again:
     3470
    34663471  fd           = -1;
    34673472  fstat_return = -1;
    34683473  rval_open    = -1;
    34693474
    3470   theFile->link_path = NULL;
    3471 
    34723475  if (stat_return == 0 && S_ISREG(buf.st_mode))
    34733476    {
     
    34753478                                    path /* theFile->fullpath */, SL_YESPRIV);
    34763479      if (SL_ISERROR(rval_open))
    3477         err_open = errno;
    3478 
    3479       {
    3480         char * stale = sl_check_stale();
    3481 
    3482         if (stale)
    3483           {
    3484             sh_error_handle(SH_ERR_ERR, FIL__, __LINE__, err_open, MSG_E_SUBGEN,
    3485                             stale, _("sh_unix_getinfo_open"));
    3486           }
    3487       }
     3480        {
     3481          char * stale = sl_check_stale();
     3482         
     3483          if (stale)
     3484            {
     3485              sh_error_handle(SH_ERR_ERR, FIL__, __LINE__, err_open, MSG_E_SUBGEN,
     3486                              stale, _("sh_unix_getinfo_open"));
     3487            }
     3488
     3489          if (errno == EBADF && try == 0) /* obsolete, but we keep this, just in case */
     3490            {
     3491              ++try;
     3492              goto try_again;
     3493            }
     3494          err_open = errno;
     3495        }
    34883496
    34893497      alert_timeout = 120; /* this is per 8K block now ! */
     
    35293537                              MSG_E_SUBGEN,
    35303538                              stale, _("sh_unix_getinfo_fstat"));
     3539            }
     3540
     3541          if (try == 0) /* obsolete, but we keep this, just in case */
     3542            {
     3543              ++try;
     3544              sl_close(rval_open);
     3545              goto try_again;
    35313546            }
    35323547        }
Note: See TracChangeset for help on using the changeset viewer.