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

Responder a