senales
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| senales [2014/06/03 14:10] – [Señales y setjmp/longjmp] lmateu | senales [2016/11/24 13:13] (actual) – [sigaction/sigprocmask] lmateu | ||
|---|---|---|---|
| Línea 140: | Línea 140: | ||
| } | } | ||
| - | int call_with_timeout(int (*f)(void *), void *p int timeout) | + | int call_with_timeout(int (*f)(void *), void *p, int timeout) |
| { | { | ||
| int res; | int res; | ||
| Línea 195: | Línea 195: | ||
| ... | ... | ||
| | | ||
| - | int call_with_timeout(int (*f)(), int timeout) { | + | int call_with_timeout(int (*f)(void *), void *p, int timeout) { |
| ... | ... | ||
| if (sigsetjmp(ring, | if (sigsetjmp(ring, | ||
| Línea 214: | Línea 214: | ||
| una traza de todos los recursos pedidos para así liberarlos cuando se cumpla el timeout. | una traza de todos los recursos pedidos para así liberarlos cuando se cumpla el timeout. | ||
| no es trivial de hacer. | no es trivial de hacer. | ||
| + | |||
| + | También hay que considerar que la invocación de la rutina que atiende la señal puede provocar dataraces. | ||
| + | Por ejemplo supongamos que la función f usa malloc. | ||
| + | del malloc y por lo tanto el heap que maneja malloc queda en un estado inconsistente. | ||
| + | la señal también invoca malloc, se puede producir una inconsistencia que gatille un segmentation fault o | ||
| + | que se entregue 2 veces el mismo pedazo de memoria. | ||
| + | señal deben ser simples como asignar una variable global por ejemplo. | ||
| ==== sigaction/ | ==== sigaction/ | ||
| Línea 225: | Línea 232: | ||
| * etc. | * etc. | ||
| - | Del mismo modo, sigprocmask permite deshabilitar/ | + | Del mismo modo, sigprocmask permite deshabilitar/ |
| + | para resolver el datarace asociado al uso de malloc tanto en el código en donde puede ocurrir una señal como en la función | ||
| + | que atiende esa señal. | ||
| + | invocar nuevamente sigprocmask para reactivar nuevamente la señal. | ||
| + | malloc, la señal quedará pendiente y solo se invocará la rutina de atención cuando se reactive la señal en la | ||
| + | segunda llamada de sigprocmask. | ||
| Consulte la página del manual para averiguar más sobre estas funciones. | Consulte la página del manual para averiguar más sobre estas funciones. | ||
| + | |||
| + | ==== Ejercicio ==== | ||
| + | |||
| + | Resuelva la parte c de la pregunta 1 del [[http:// | ||
senales.1401804605.txt.gz · Última modificación: por lmateu
