No es por hinchar, pero acerca de...

> Pero en este caso, estamos hablando de artefactos que de por sí ya son de
bajo nivel: un stdioFileStream y la librería de base que se conecta al SO.
¿Qué chances tienen esos artefactos de resolver la excepción, aunque se
genera en su contexto? NINGUNA. No hay nada interesante que puedan hacer,
aunque sí muchas cosas molestas y peligrosas.

tengo un contraejemplo interesante.  Con Microsoft nunca se sabe que error
tiran funciones como WriteFile().

http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx

Lo unico que dice la documentacion es "si falla, llama a GetLastError() para
ver que paso".  Ok, pero cuales de los ~600 errores posibles puede suceder
con WriteFile()?

Uno de los errores que puede occurrir es ERROR_NO_SYSTEM_RESOURCES, error
numero 1450.  En ese caso, una excepcion bien puesta te puede resolver el
error en la imagen.  Basicamente, el tema es que no se puede escribir un
archivo por red en bloques de mas de 64mb - 32kb + 16 bytes.  Por supuesto,
ese limite no esta documentado, asi que el codigo tiene que ir tratando
escrituras cada vez mas chicas hasta llegar a 1 byte... grrr...

/*
 * When writing files over the network, the Windows API may fail if the
 * write block is so large that not enough memory can be allocated to
 * buffer the write.  Unfortunately, using unbuffered writes would either
 * cause a major slowdown in cases where buffering works, and depending
 * on the way this is done a 512 byte boundary on read/write amounts and
 * memory buffer locations may be imposed.  To work around this limitation,
 * [this function] calls itself halving each write until the write
succeeds.  A
 * failure to write a single byte is treated as a condition to assume the
 * write is not possible at all, at which point [this function] fails.  The
only
 * error for which this is done is ERROR_NO_SYSTEM_RESOURCES, value 1450.
 *
 * For more information, see the following links.
 * http://support.microsoft.com/kb/913872
 * http://support.microsoft.com/kb/99794
 * http://msdn.microsoft.com/en-us/library/cc644950(VS.85).aspx
 * http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx
 * http://msdn.microsoft.com/en-us/library/aa364439.aspx
 *
 */

En los casos en que este codigo tiene que estar en la imagen, esta bueno
poner el codigo en el default handler de un exception apropiado porque asi
solo hay que escribirlo una vez.

Dicho sea de paso, este es otro ejemplo de cosas que estan en una VM, y que
no tienen nada que ver con ejecutar bytecodes.

Andres.

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a