Con DLLCC y el pragma _wincall, si la funcion que llamas falla, entonces la VM llama a GetLastError() y la primitiva que llama funciones de C falla devolviendo una pseudo variable temporal que contiene el codigo que devolvio GetLastError(). Como todo eso ocurre en el mismo thread, entonces es atomico. En *nix hay _syscall.
2010/8/30 Hernán Morales Durand <[email protected]>: > ¿Entonces usando DLLCC podés asegurar atomicidad de grano grueso? Te > pregunto porque nunca usé DLLCC y no entiendo si tu problema es > esencialmente de concurrencia, de convención de llamadas o > portabilidad (me imagino que ese _wincall no funciona en Linux :) > Saludos, > > Hernán > > El día 30 de agosto de 2010 18:17, Andres Valloud > <[email protected]> escribió: >> Por eso dije que en DLLCC existe el pragma _wincall. El problema, sin >> embargo, es que a veces tenes que llamar a WSAGetLastError(), o a >> CuchuflitoGetLastError(), o la convencion de indicacion de errores es >> diferente para un DLL que hizo algun otro, y en general no se puede >> andar agregando _mongocall, _juanperezcall y otros pragmas asi tan >> facil. Para esos, lo mejor es escribir una primitiva chiquita en C y >> llamarla desde la imagen. >> >> 2010/8/30 Hernán Morales Durand <[email protected]>: >>> El día 28 de agosto de 2010 02:59, Andres Valloud >>> <[email protected]> escribió: >>>> Yendo un poco mas a fondo... en general el tema con esos pragmas es >>>> que no cubren todas las funciones habidas y por haber. Por ejemplo, >>>> en Windows cuando usas sockets tenes que llamar a WSAGetLastError() en >>>> vez de GetLastError()... se imaginan que no se puede andar agregando >>>> _wsawincall, _pirulocall, _mongocall etc todo el tiempo para >>>> contemplar todos los casos posibles. Por eso es que, si la cosa se >>>> pone peliaguda, lo mejor es ni usar un FFI y escribir primitivas >>>> directamente. >>> >>> ¿Qué te impide implementar un mecanismo de sincronización por >>> exclusión mutua o por condición a nivel FFI? >>> >>> Hernán >>> >>> -- >>> 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 > > -- > 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
