JuliaAstro / FITSIO.jl

Flexible Image Transport System (FITS) file support for Julia
http://juliaastro.org/FITSIO.jl/
MIT License
55 stars 29 forks source link

Error randomly occuring while reading FITS file multiple times #191

Open Baphometsixsixsix opened 1 year ago

Baphometsixsixsix commented 1 year ago

The FITS() function works well for a certain number of times and then suddenly throws up error. Any idea why could this be happening?

using FITSIO
FITS("/home/archisman/FITSfile1.fits")

File: /home/archisman/FITSfile1.fits Mode: "r" (read-only) HDUs: Num Name Type
1 Image
2 SPECTRUM Table

j = 0
for i in 1:100000
    FITS("/home/archisman/FITSfile1.fits")
    j+=1
end

CFITSIO has encountered an error while processing /home/archisman/FITSfile1.fits. Error code 104: could not open the named file Detailed error message follows: failed to find or open the following file: (ffopen) /home/archisman/FITSfile1.fits

Stacktrace: [1] fits_assert_ok @ ~/.julia/packages/CFITSIO/BfhtD/src/CFITSIO.jl:225 [inlined] [2] fits_open_file(filename::String, mode::Int64) @ CFITSIO ~/.julia/packages/CFITSIO/BfhtD/src/CFITSIO.jl:380 [3] FITS(filename::String, mode::String; extendedparser::Bool) @ FITSIO ~/.julia/packages/FITSIO/ggf1s/src/FITSIO.jl:183 [4] FITS (repeats 2 times) @ ~/.julia/packages/FITSIO/ggf1s/src/FITSIO.jl:181 [inlined] [5] top-level scope @ ./In[3]:3

j 4043 FITSIOerror

giordano commented 1 year ago

My guess is that you can't open an already opened file? Note that this is failing in the C library CFITSIO underlying this package.

Baphometsixsixsix commented 1 year ago

I encountered this error for first time while trying to iterate over thousands of FITS files in a folder. I thought maybe some of those files are corrupted so I tried it on a file which I successfully opened earlier. I've posted what happened next in the original issue.

giordano commented 1 year ago

Again, this is failing inside CFITSIO, there isn't much we can do about this unless you can prove this only happens in this package and not in a pure C equivalent program.