close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 10 years ago

Last modified 10 years ago

#1816 new defect

Bloqueos en la lectura de OZAS

Reported by: Chakib Faghloumi Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Mantainance
Component: Kernel Version: 3.1
Severity: normal Keywords:
Cc:

Description

Se observan bloqueos contra lectura en la lectura de archivos OZA, lo que ocasiona errores cuando simultáneamente varias instancias de TOL coinciden en la lectura de un único archivo.

Se sugiere, si es posible, eliminar ese bloqueo en la lectura, o incorporar un mecanismo de espera o redundancia en la obtención de la información que pudiera ayudar de manera sencilla esta limitación.

Change History (1)

comment:1 Changed 10 years ago by Víctor de Buen Remiro

Los bloqueos de lectura son cosa de Windows, que lo hace fatal. Eso en Linux seguro que no pasa. Es el mismo problema que cuando abres una hoja Excel y luego no la puedes abrir desde TOL porque está bloqueada.

Yo lo que uso es una función como esta

//////////////////////////////////////////////////////////////////////////////
Text WaitForLockedFile(Text file)
//////////////////////////////////////////////////////////////////////////////
{
  Real handler = FOpen(file,"r+b");
  While(!handler,
  { 
    WriteLn("File "+file+" is locked. Waiting ...");
    Real Sleep(2);
    Real handler := FOpen(file,"r+b")
  });
  Real If(handler, FClose(handler));
  file
};

Luego, en cualquier función que necesite abrir un fichero que puede estar bloqueado en vez de pasarle el nombre del archivo "file.xxx" le paso WaitForLockedFile("file.xxx")

Podría añadirse a la StdLib aunque para eso habría que añadir más parámetros, como máximo de reintentos y tiempo de espera máximo (timeout)

Note: See TracTickets for help on using tickets.