On 08/26/2010 06:06 PM, Andres Valloud wrote:
> En el caso general, como harias para detectar que otro proceso
> interrumpio al proceso que esta por llamar a GetLastError(),
si, no se puede me parece en el caso general. Por otro lado, no
es solo si llamaron a GetLastError(). Si llamaron a cualquier otra
función de Windows, que resetea el GetLastError() también.

El GetLastError() es único por cada thread de Windows, si dos
procesos nativos se interrumpen mutuamente, igual el GetLastError()
de cada uno está a salvo. El tema es que en Smalltalk pasan dos cosas:

. green threads, donde un solo thread nativo aloja más de un hilo de
ejecución, y entonces se puede corromper el last error.
. La VM también hace cosas entre bytecode y bytecode, método y
método, etc. Si entre que llamas a la API y llamas a GetLastError(),
por ejemplo, caé un GC, y el GC le devuelve memoria al OS (VirtualProtect(),
mmap(), etc). eso va a cambiar el GetLastError().

como dijo Andres de entrada, no es seguro llamar a GetLastError()
via FFI o algún otro tipo de API call. Y la VM tendría que proveer un
mecanismo seguro de hacerlo (básicamente, llamar a GetLastError()
después de cada API call, y guardarlo para uso futuro)

    saludos,
    gera

-- 
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