Opened 17 years ago
Closed 15 years ago
#546 closed defect (fixed)
Unexpected message of corrupted BBM file
Reported by: | Víctor de Buen Remiro | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | |
Component: | Math | Version: | head |
Severity: | blocker | Keywords: | |
Cc: |
Description
I've detected that in very fast machines with multiple CPU's (core 2 duo), when you use massive calls to MatReadFile and MatWriteFile some BBM files could be corrupted.
Change History (8)
comment:1 Changed 16 years ago by
Resolution: | → worksforme |
---|---|
Status: | new → closed |
comment:2 Changed 15 years ago by
Resolution: | worksforme |
---|---|
Status: | closed → reopened |
Se ha presentado un nuevo caso tras compilar con Visual C++ 2008
ERROR: [6] [BBM_BinRead]Fichero BBM corrupto C:/Users/vdebuen/prj/tolp/trunk/tol_tests/tol/BSR/test_42/model/joint.1.bsr.mcmc.bbm Numero de filas:1801 Numero de columnas:1390 Bytes por int s_int :4 Bytes por BDat s_BDat :8 Tamaño esperado del fichero:20027128 Tamaño real del fichero:19915928
comment:3 Changed 15 years ago by
El anterior mensaje surgió durante una simulación de una cadena MCMC en Windows 7 con caché de 10 filas que es precisamente la diferencia entre el tamaño esperado y el encontrado.
(20027128-4*2)/1390*8 = 1801 (19915928-4*2)/1390*8 = 1791
En la función BBM_BinAppend
el fichero se abre inicialmente en modo rb:read only para leer las dimensiones que se encuentran al principio del fichero se cierra el mismo, luego se cierra y se reabre en modo r+b:Rewrite mode para sobreescribir las nuevas dimensiones, y finalmente se reabre en modo append write para añadir las nuevas filas.
Por alguna razón se abortó el proceso de concatenación BBM_BinAppend
pues después de haber actualizado el número de filas no se llegaron a añadir al final del archivo.
Quizás convendría simplificar el mecanismo con una sola apertura usando las funciones de navegación interna e modo binario.
También habría que comprobar si alguna de las funciones de acceso al disco pudiera estar obsoleta.
comment:4 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
comment:5 Changed 15 years ago by
OIS también da a veces errores del mismo estilo al comprobar la integridad de los archivos.
ERROR: [1] OIS: OIS: Fallo en el test de integridad de tamaño de ficheros. .matrix parece estar corrupto pues ocupa 5219 Kb en lugar de 5267
Tengo sospechas de que las funciones fopen, fclose, y demás no permiten en windows abrir para lectura mientras otro proceso está escribiendo. Por lo visto hay otras funciones para abrir de forma compartida y hay otras que les llaman seguras y que habrá que estudiar.
comment:6 Changed 15 years ago by
Resolution: | fixed |
---|---|
Status: | closed → reopened |
comment:8 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
I cannot replicate this bug any more.