From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,FUZZY_XPILL autolearn=no version=3.2.5 To: sisyphus@lists.altlinux.org From: Michael Pozhidaev Date: Fri, 10 Apr 2009 05:48:34 +0700 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: quoted-printable X-Virus-Scanned: ClamAV Subject: [sisyphus] =?koi8-r?b?UTog797FztggzsXQ0s/T1M/KINfP0NLP0yDOwSDU?= =?koi8-r?b?xc3VIHNlbGVjdCgpIMkg08nHzsHMz9c=?= X-BeenThere: sisyphus@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Sisyphus discussions List-Id: ALT Linux Sisyphus discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Apr 2009 22:48:51 -0000 Archived-At: List-Archive: List-Post: =F0=D2=C9=D7=C5=D4 =D7=D3=C5=CD! =F7=CF=D0=D2=CF=D3 =C4=CC=D1 =CD=C1=D3=D4=C5=D2=CF=D7 =D4=DD=C1=D4=C5=CC=D8= =CE=CF=CA =CF=C2=D2=C1=C2=CF=D4=CB=C9 =D3=C9=C7=CE=C1=CC=CF=D7. =E5=D3=CC= =C9 =D5 =CB=CF=C7=CF-=CE=C9=C2=D5=C4=D8 =C5=D3=D4=D8 =CF=D0=D9=D4, =C4=C1=CA=D4=C5 =D2=C5=CB=CF=CD=C5=CE=C4=C1=C3= =C9=C9, =D0=CF=D6=C1=CC=D5=CA=D3=D4=C1. =F0=D2=C5=C4=D0=CF=CC=CF=D6=C9=CD, =CD=CE=C5 =CE=C1=C4=CF =CE=C1=D0=C9=D3= =C1=D4=D8 =D0=D2=CF=C7=D2=C1=CD=CD=D5 =D3 =CF=C2=D2=C1=C2=CF=D4=CB=CF=CA = SIGCHLD =C9 =C4=C1=CE=CE=D9=C8 =D0=CF=D3=D4=D5=D0=C1=C0=DD=C9=C8 =CF=D4 =D2=C1=DA=CE=D9=C8 =C6=C1=CA=CC=CF= =D7=D9=C8 =C4=C5=D3=CB=D2=C9=D0=D4=CF=D2=CF=D7. =E8=CF=DE=D5 =D3=C4=C5=CC= =C1=D4=D8 =DC=D4=CF =D4=DD=C1=D4=C5=CC=D8=CE=CF =C9 =D0=D2=CF=C4=D5=CD=C1=CE=CE=CF. =EF=C7=CF=D7=CF=D2=CB=C1: =C5=D3=D4=D8= =C4=C5=CA=D3=D4=D7=C9=D1, =CB=CF=D4=CF=D2=D9=C5 =C4=CF=CC=D6=CE=D9 =C2=D9= =D4=D8 =D7=D9=D0=CF=CC=CE=C5=CE=D9 _*=CE=C5=DA=C1=CD=C5=C4=CC=C9=D4=C5=CC=D8=CE=CF*_ =D0=CF=D3=CC=C5 =D0=CF=CC= =D5=DE=C5=CE=C9=D1 SIGCHLD. "=EE=C5=DA=C1=CD=C5=C4=CC=C9=D4=C5=CC=D8=CE=CF= " =C9=CD=C5=C5=D4=D3=D1 =D7 =D7=C9=C4=D5 =C2=C5=DA =DA=C1=CD=C5=D4=CE=CF=CA =DA=C1=C4=C5=D2=D6=CB= =C9 =D0=CF=CC=D8=DA=CF=D7=C1=D4=C5=CC=C0. =E4=CF=D0=D5=D3=CB=C1=C5=D4=D3=D1= =DA=C1=C4=C5=D2=D6=CB=C1 0.1-0.2 =D3=C5=CB=D5=CE=C4=D9. =F3=C8=C5=CD=C1=D4=C9=DE=C5=D3=CB=C9 =CB=CF=C4 =D7=D9=C7=CC=D1=C4=C9=D4 =D4= =C1=CB: int there_was_sigchld =3D 0; void sigchld_handler(int) { there_was_sigchld =3D 1; } void check_sigchld() { if (there_was_sigchld) do_what_we_need(); there_was_sigchld =3D 0; } void main_loop() { while(1) { check_sigchld(); select(required_fds); check_data_from_fds_if_there_was_any(); } } =F7=D3=A3 =D7=D9=C7=CC=D1=C4=C9=D4 =CB=C1=CB =C2=D5=C4=D4=CF =C2=D9 =CE=CF= =D2=CD=C1=CC=D8=CE=CF: select() =D0=D2=CF=D3=D9=D0=C1=C5=D4=D3=D1 =D7=D3=C5= =C7=C4=C1, =CB=C1=CB =D4=CF=CC=D8=CB=CF =D0=D2=C9=C8=CF=C4=C9=D4 =D3=C9=C7=CE=C1=CC =C9=CC=C9 = =D0=CF=D1=D7=CC=D1=C0=D4=D3=D1 =C4=C1=CE=CE=D9=C5 =D7 =C4=C5=D3=CB=D2=C9=D0= =D4=CF=D2=C1=C8. =ED=D9 =CE=C5 =D5=D3=CE=A3=CD =CE=C1 select() =D3 =CE=C5=D0=D2=CF=D7=C5=D2=C5=CE=CE=D9=CD =C6=CC=C1=C7=CF= =CD =D0=CF=CC=D5=DE=C5=CE=C9=D1 SIGCHLD, =C1 =CB=CF=C7=C4=C1 =D0=CF=CC=D5= =DE=C9=CD =C5=C7=CF =C5=DD=A3 =D2=C1=DA, =D4=CF =D0=D2=CF=D3=CE=A3=CD=D3=D1. =EE=EF! =E5=D3=CC=C9 =D3=C9=C7=CE=C1=CC =D0=D2=C9=C4=A3=D4 =F0=EF=F3=EC=E5= =D7=D9=DA=CF=D7=C1 check_sigchld(), =CE=CF =E4=EF =D7=D9=DA=CF=D7=C1 select() (=D7=C5=D2=CF=D1=D4=CE=CF=D3=D4=D8 =CE=C9=DE=D4=CF=D6=CE=C1=D1, = =CE=CF =D7=D3=A3 =D6=C5), =D4=CF =C4=C5=CA=D3=D4=D7=C9=D1, =D4=D2=C5=C2=D5= =C5=CD=D9=C5 =D0=D2=C9 =D0=CF=CC=D5=DE=C5=CE=C9=C9 SIGCHLD =CF=CB=C1=D6=D5=D4=D3=D1 =D7=D9=D0=CF= =CC=CE=C5=CE=CE=D9=CD=C9 =D4=CF=CC=D8=CB=CF =D0=CF=D3=CC=C5 =D4=CF=C7=CF,= =CB=C1=CB =D0=D2=C9=C4=D5=D4 =CF=DE=C5=D2=C5=C4=CE=D9=C5 =C4=C1=CE=CE=D9=C5 =D0=CF =C4=C5=D3=CB=D2=C9=D0= =D4=CF=D2=C1=CD, =C1 =DC=D4=CF =CD=CF=D6=C5=D4 =C2=D9=D4=D8 =C4=CF=CC=C7=CF= =C9 =CE=C1=D3 =CE=C5 =D5=D3=D4=D2=C1=C9=D7=C1=C5=D4. =FE=C9=D4=C1=C5=CD =D7=CE=C9=CD=C1=D4=C5=CC=D8=CE=CF =CD=C1=CE =D0=CF sel= ect(), =D4=C1=CD =C5=D3=D4=D8 =C9=CE=D4=C5=D2=C5=D3=CE=CF=C5 =CD=C5=D3=D4= =CF: --- =CE=C1=DE=C1=CC=CF =C3=C9=D4=C1=D4=D9 --- =E9=C4=C5=D1 pselect =D7 =D4=CF=CD, =DE=D4=CF =C5=D3=CC=C9 =CE=D5=D6= =CE=CF =D0=CF=C4=CF=D6=C4=C1=D4=D8 =D3=CF=C2=D9=D4=C9=D1: =D3=C9=C7=CE=C1= =CC=C1 =C9=CC=C9 =C1=CB=D4=C9=D7=CE=CF=D3=D4=C9 =CE=C1 =C6=C1=CA=CC=CF=D7=CF=CD =C4=C5=D3=CB=D2=C9=D0=D4=CF=D2=C5, =D4=CF= =D4=D2=C5=C2=D5=C5=D4=D3=D1 =C1=D4=CF=CD=C1=D2=CE=C1=D1 =D0=D2=CF=D7=C5=D2= =CB=C1, =DE=D4=CF=C2=D9 =D0=D2=C5=C4=CF=D4=D7=D2=C1=D4=C9=D4=D8 race condition. (=F0=D2=C5=C4=D0=CF=CC=CF=D6=C9=CD, =CF=C2=D2=C1=C2=CF= =D4=DE=C9=CB =D3=C9=C7=CE=C1=CC=C1 =D5=D3=D4=C1=CE=C1=D7=CC=C9=D7=C1=C5=D4= =C7=CC=CF=C2=C1=CC=D8=CE=D9=CA =C6=CC=C1=C7 =C9 =D7=CF=DA=D7=D2=C1=DD=C1=C5=D4 =D5=D0=D2=C1=D7=CC=C5=CE=C9=C5. = =F4=CF=C7=C4=C1 =D0=D2=CF=D7=C5=D2=CB=C1 =DC=D4=CF=C7=CF =C7=CC=CF=C2=C1= =CC=D8=CE=CF=C7=CF =C6=CC=C1=C7=C1, =DA=C1 =CB=CF=D4=CF=D2=CF=CA =D3=CC=C5=C4=D5=C5=D4 select(), =CD=CF=D6=C5=D4 =D0=D2=C9=D7=C5=D3= =D4=C9 =CB =D0=CF=C4=D7=C9=D3=C1=CE=C9=C0, =C5=D3=CC=C9 =D3=C9=C7=CE=C1= =CC =D0=CF=D1=D7=CC=D1=C5=D4=D3=D1 =D3=D2=C1=DA=D5 =D0=CF=D3=CC=C5 =D0=D2=CF=D7=C5=D2=CB=C9, =CE=CF =D0=D2=D1=CD=CF= =D0=C5=D2=C5=C4 =D7=D9=DA=CF=D7=CF=CD select. =F3 =C4=D2=D5=C7=CF=CA= =D3=D4=CF=D2=CF=CE=D9, pselect =D0=CF=DA=D7=CF=CC=D1=C5=D4 =D3=CE=C1=DE=C1=CC=C1 =DA=C1=C2=CC=CF=CB= =C9=D2=CF=D7=C1=D4=D8 =D3=C9=C7=CE=C1=CC=D9, =CF=C2=D2=C1=C2=CF=D4=C1=D4=D8= =D0=D2=C9=DB=C5=C4=DB=C9=C5 =D3=C9=C7=CE=C1=CC=D9, =C1 =DA=C1=D4=C5=CD =D7=D9=DA=D7=C1=D4=D8 pselect() =D3 =D6=C5=CC=C1=C5=CD=CF=CA si= gmask, =D4=C5=CD =D3=C1=CD=D9=CD =C9=DA=C2=C5=C7=C1=D1 race condition.) = =F4=C1=CB =CB=C1=CB Linux =D7 =CE=C1=D3=D4=CF=D1=DD=C5=C5 =D7=D2=C5=CD=D1 =CE= =C5 =D3=CF=C4=C5=D2=D6=C9=D4 =D3=C9=D3=D4=C5=CD=CE=CF=C7=CF =D7=D9=DA=CF= =D7=C1 pselect(), =D4=C5=CB=D5=DD=C1=D1 =D2=C5=C1=CC=C9=DA=C1=C3=C9=D1 =DC=D4=CF=CA =D0=D2=CF=C3=C5=C4=D5=D2= =D9 =D7 glibc =D7=D3=C5 =C5=DD=C5 =D3=CF=C4=C5=D2=D6=C9=D4 race condition= . --- =CB=CF=CE=C5=C3 =C3=C9=D4=C1=D4=D9 --- =F0=CF=DE=D4=C9 =CE=C1=DB =D3=CC=D5=DE=C1=CA. =F7=CF=D4 =D4=D5=D4 =C9 =CE= =D5=D6=C5=CE =D3=CF=D7=C5=D4: =D0=D2=C1=D7=C9=CC=D8=CE=CF =D1 =D0=CF=CE=C9= =CD=C1=C0, =DE=D4=CF =C4=CF=CC=D6=CE=CF =C2=D9=D4=D8 =D4=C1=CB: void main_loop() { while(1) { block_sigchld(); check_sigchld(); pselect(required_fds, and_signal_mask_with_enabled_sigchld); check_data_from_fds_if_there_was_any(); } } =E5=D3=CC=C9 =C4=CF=CC=D6=CE=CF =C2=D9=D4=D8 =D4=C1=CB, =D4=CF =DE=D4=CF = =D0=D2=CF=C9=DA=CF=CA=C4=A3=D4, =C5=D3=CC=C9 sigchld =D0=D2=C9=DB=A3=CC =D7= =D4=CF=D4 =CB=D2=C1=D4=CB=C9=CA =CD=CF=CD=C5=CE=D4, =CB=CF=C7=C4=C1 =CF=CE =C2=D9=CC= =DA=C1=C2=CC=CF=CB=C9=D2=CF=D7=C1=CE? pselect() =D5=D7=C9=C4=C9=D4, =DE=D4= =CF =D0=CF=CB=C1 =D3=C9=C7=CE=C1=CC =C2=D9=CC =DA=C1=C2=CC=CF=CB=C9=D2=CF=D7=C1=CE, =CF=CE= =D0=D2=C9=C8=CF=C4=C9=CC, =C9 =CE=D5=D6=CE=CF =D3=D2=C1=DA=D5 =D0=D2=C5=CB= =D2=C1=D4=C9=D4=D8 =CF=D6=C9=C4=C1=CE=C9=C5, =D7=D9=DA=D7=C1=D4=D8 =C5=C7=CF =CF=C2=D2=C1=C2=CF=D4=DE=C9=CB =C9 =C4=C1= =D4=D8 =D0=D2=CF=C7=D2=C1=CD=CD=C5 =C5=C7=CF =CF=C2=D2=C1=C2=CF=D4=C1=D4=D8= ? =E5=D3=CC=C9 =CE=C5=D4, =D4=CF =D4=CF=C7=C4=C1 =CD=D9 =D7=CF=CF=C2=DD=C5 =D4=C5=D2=D1=C5=CD =D0=CF=CC=D5= =DE=C5=CE=C9=C5 SIGCHLD. =E5=DD=A3 =C5=D3=D4=D8 =C9=CE=D4=C5=D2=C5=D3=CE=C1= =D1 =C6=D5=CE=CB=C3=C9=D1 sigpending(), =CE=CF =D5=CD=C5=D3=D4=CE=C1 =CC=C9 =CF=CE=C1 =DA=C4=C5=D3=D8= , =D7=CF=D4 =DC=D4=CF =CE=C5=D0=CF=CE=D1=D4=CE=CF.=20 =EF=DE=C5=CE=D8 =D0=D2=CF=DB=D5 =D3=CF=D7=C5=D4=C1 =C9 =D0=CF=CD=CF=DD=C9= . :) =F0=D2=C9=C4=D5=CD=C1=D4=D8 test case =CE=C1 =DC=D4=CF=D4 =D3=CC=D5=DE= =C1=CA =D0=CF=DE=D4=C9 =CE=C5=D7=CF=DA=CD=CF=D6=CE=CF, =D4. =CB. =CE=D5=D6=CE=CF =D5=CD=D5=C4=D2= =C9=D4=D8=D3=D1 =D0=CF=CC=D5=DE=C9=D4=D8 SIGCHDL =D7 =D3=CF=D7=C5=D2=DB=C5= =CE=CE=CF =CE=C5=D7=C5=D2=CF=D1=D4=CE=D9=CA =CD=CF=CD=C5=CE=D4. --=20 Michael Pozhidaev. E-mail: msp@altlinux.ru. Tomsk State University. http://www.csd.tsu.ru ALT Linux Team. http://www.altlinux.org