Commit f5b90eec8f7b481962ed835a7b4f08f418fe26db
1 parent
3411dd6b
Make GFilename::is_fits thread safe (#1717).
Showing
3 changed files
with
18 additions
and
9 deletions
ChangeLog
| 1 | -2016-02-25 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> | |
| 1 | +2016-02-28 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> | |
| 2 | 2 | |
| 3 | 3 | * Version 1.1.0 released |
| 4 | 4 | ========================= |
| 5 | 5 | |
| 6 | + Make GFilename::is_fits thread safe (#1717). | |
| 6 | 7 | Revise GTime operators (#1714) |
| 7 | 8 | Add GSkyMap::publish() method to publish map on VO Hub (#1710) |
| 8 | 9 | Add GVOClient::publish() method to publish a FITS HDU (#1710) | ... | ... |
NEWS
| ... | ... | @@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.1.0 |
| 2 | 2 | |
| 3 | 3 | Author(s) : Juergen Knoedlseder |
| 4 | 4 | |
| 5 | -25 February 2016 | |
| 5 | +28 February 2016 | |
| 6 | 6 | |
| 7 | 7 | |
| 8 | 8 | 1. Introduction |
| ... | ... | @@ -196,6 +196,9 @@ the access protocol (e.g. http, ftp, file) of the file name, the method |
| 196 | 196 | path() returns the path of th file name, and the method file() returns the |
| 197 | 197 | file name without the path. |
| 198 | 198 | |
| 199 | +Put FITS access in a critical OMP zone to make GFilename::is_fits() thread | |
| 200 | +safe (#1717). | |
| 201 | + | |
| 199 | 202 | |
| 200 | 203 | 14. XML module |
| 201 | 204 | -------------- | ... | ... |
src/support/GFilename.cpp
| ... | ... | @@ -253,7 +253,7 @@ bool GFilename::exists(void) const |
| 253 | 253 | * @return True if file is a FITS file. |
| 254 | 254 | * |
| 255 | 255 | * Test if the file or a compressed version of the file (with a .gz, .Z, .z, |
| 256 | - * or .zip extension) is a FITS file. | |
| 256 | + * or .zip extension) is a FITS file. This method is thread safe. | |
| 257 | 257 | ***************************************************************************/ |
| 258 | 258 | bool GFilename::is_fits(void) const |
| 259 | 259 | { |
| ... | ... | @@ -261,14 +261,19 @@ bool GFilename::is_fits(void) const |
| 261 | 261 | bool is_fits = false; |
| 262 | 262 | |
| 263 | 263 | // Check now for a FITS file. This works only if cfitsio is available. |
| 264 | + // Put the code into a critical zone as it might be called from within | |
| 265 | + // a parallelized thread. | |
| 264 | 266 | #if defined(HAVE_LIBCFITSIO) |
| 265 | - int status = 0; | |
| 266 | - fitsfile* fptr = NULL; | |
| 267 | - status = ffopen(&fptr, url().c_str(), 0, &status); | |
| 268 | - if (status == 0) { | |
| 269 | - is_fits = true; | |
| 267 | + #pragma omp critical | |
| 268 | + { | |
| 269 | + int status = 0; | |
| 270 | + fitsfile* fptr = NULL; | |
| 271 | + status = ffopen(&fptr, url().c_str(), 0, &status); | |
| 272 | + if (status == 0) { | |
| 273 | + is_fits = true; | |
| 274 | + } | |
| 275 | + ffclos(fptr, &status); | |
| 270 | 276 | } |
| 271 | - ffclos(fptr, &status); | |
| 272 | 277 | #endif |
| 273 | 278 | |
| 274 | 279 | // Return result | ... | ... |