From: Simone Piccardi Date: Fri, 29 Mar 2002 23:12:11 +0000 (+0000) Subject: Correzioni minime X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=d0d7c2f8a828a91d9bd47fbe09b5df0e749a957b;hp=e861c0f37f9eb16aed0f8bfbdb37afa04df1f685 Correzioni minime --- diff --git a/signal.tex b/signal.tex index bbfea4f..1fb4569 100644 --- a/signal.tex +++ b/signal.tex @@ -1557,8 +1557,9 @@ verrebbe mai pi Questo problema può essere risolto (ed è la modalità con cui veniva fatto in SVr2) usando la funzione \func{longjump} (vedi \secref{sec:proc_longjmp}) per -uscire dal manipolatore, in modo da sfruttare lo stato di uscita di -quest'ultima per evitare la chiamata a \func{pause}, con un codice del tipo: +uscire dal manipolatore; in questo modo, usando lo stato di uscita di +quest'ultima, si può evitare la chiamata a \func{pause}, con un codice come +quello riportato in \ref{fig:sig_sleep_incomplete}. \begin{figure}[!htb] \footnotesize \centering @@ -1597,10 +1598,11 @@ void alarm_hand(int sig) { \label{fig:sig_sleep_incomplete} \end{figure} -In questo modo all'uscita dal manipolatore si eviterà comunque la chiamata di -\func{pause}, dato che in questo caso il valore di uscita di \func{setjmp} è -uno ed il condizionale in (\texttt{\small 15--21}) viene evitato. - +In questo caso il manipolatore non ritorna come in \ref{fig:sig_sleep_wrong}, +ma usa \func{longjmp} (\texttt{\small 15--21}) per rientrare nel corpo +principale del programma; dato che in questo caso il valore di uscita di +\func{setjmp} è 1 grazie alla condizione in (\texttt{\small 15--21}) si evita +in ogni caso che \func{pause} sia chiamata a vuoto. Ma anche questa implementazione comporta dei problemi; in questo caso infatti non viene gestita correttamente l'interazione con altri segnali; se infatti il