Hola: Se puede resolver si la VM copia en cada swith a una i.v. del process el status no?
Saludos GallegO El día 27 de agosto de 2010 18:50, Gerardo Richarte <[email protected]> escribió: > 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 -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
