From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13522 invoked by alias); 24 Jul 2002 07:31:22 -0000 Mailing-List: contact pthreads-win32-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sources.redhat.com Received: (qmail 13514 invoked from network); 24 Jul 2002 07:31:19 -0000 Received: from unknown (HELO digit.ise.canberra.edu.au) (137.92.140.41) by sources.redhat.com with SMTP; 24 Jul 2002 07:31:19 -0000 Received: from ise.canberra.edu.au (localhost.localdomain [127.0.0.1]) by digit.ise.canberra.edu.au (8.11.6/8.11.6) with ESMTP id g6O7VFH06289; Wed, 24 Jul 2002 17:31:16 +1000 Message-ID: <3D3E57C3.7090506@ise.canberra.edu.au> Date: Wed, 24 Jul 2002 00:31:00 -0000 From: Ross Johnson Organization: University of Canberra, Information Sciences and Engineering User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513 X-Accept-Language: en-us, en MIME-Version: 1.0 To: pthreads-win32@sources.redhat.com, nir.nizry@bluesoft-inc.com Subject: Re: Problem with pthread_cond_timedwait(). References: Content-Type: multipart/mixed; boundary="------------040506050703080101040707" X-SW-Source: 2002/txt/msg00085.txt.bz2 This is a multi-part message in MIME format. --------------040506050703080101040707 Content-Type: text/plain; charset=windows-1255; format=flowed Content-Transfer-Encoding: 7bit Content-length: 3198 This is the same problem as reported several months ago by Paul Joseph - see http://sources.redhat.com/ml/pthreads-win32/2002/msg00038.html Nir's description is pretty accurate. This is a fairly critical bug now, so any help would really be appreciated. At the time, I attempted to locate the problem but failed and haven't looked at it since. Here's what I found at the time by modifying and running Paul's test code: ... running on a single CPU machine under Windows 98. - it hasn't hung when there are only one send and receive thread; - there is no mutex deadlock occuring (i.e. same thread attempting to lock the mutex twice). That can be seen by looking at the code, but it was confirmed by using errorcheck mutexes; - it's not compiler dependent. Both MSVC and GNU C versions hang; - it's random; - the process doesn't hang, but all threads appear to block; - all send threads stop when they block on the mutex lock. Thus one receive thread hanging will effectively stop all send threads, which in turn will stop all remaining receive threads; It appears that something is causing the mutex not to be unlocked at some point, and all threads consequently block on the mutex lock. I've attached the modified test code in case someone has time to look at it. 99% of the code is just execution tracing. You'll have to see the code to interpret the log output though (unfortunately). Ross Nir Nizry wrote: > Hello All, > > I have a problem with pthread_cond_timedwait(). > I have a system with 5 threads that in their main loop wait with a timeout > (timedwait) on a condition variable to be set. > what I get is, that sometimes a thread enters the pthread_cond_timedwait() > function, and doesn't come out, even if the timeout time arrives. after this > happens, the other threads get stuck in the mutex lock before entering the > pthread_cond_timedwait() as if the mutex is already locked. > > I suspect that somehow either the pthread_cond_timedwait() function does not > release the mutex or does not return when the timeout occurs. > > does someone have an idea' or know of such an incident (or maybe a bug in > pthread)?? > > Thanks. > > Nir. > > I added the code fraction where it get stucked (this is the ONLY place in > the code where the messageMutex is locked): > > > pthread_mutex_lock(messageMutex); > > waitResult = 0; > while( m_theGeneralQueue->isEmpty() && !shouldStopThreadGlobalLoop && > (waitResult != ETIMEDOUT)) > waitResult = pthread_cond_timedwait(newMessageEvent, messageMutex, > &timeout); > > pthread_mutex_unlock(messageMutex); > > > ----------------------------------------- > > mailto:nir.nizry@bluesoft-inc.com > > ----------------------------------------- -- +-------------------------+---+ | Ross Johnson | | "Come down off the cross | Management & Technology |___| We can use the wood" - Tom Waits | Building 11 | | University of Canberra | eMail: rpj@ise.canberra.edu.au | ACT 2601 | WWW: http://public.ise.canberra.edu.au/~rpj/ | AUSTRALIA | +-----------------------------+ --------------040506050703080101040707 Content-Type: text/plain; name="condvar10.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="condvar10.c" Content-length: 19655 LyoKQ29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIChpbiB0aGlzIG9yZGVyKToK ICBOdW1iZXIgb2YgU2VuZGVyIHRocmVhZHMKICBOdW1iZXIgb2YgUmVjZWl2 ZXIgdGhyZWFkcwogIENWIHdhaXQgdGltZSAobWljcm9zZWNzKQogIFRyYWNl IGxldmVsCiAgU2VuZGVyIHNsZWVwcyAoYm9vbCkKICBSZWNlaXZlciBzbGVl cHMgKGJvb2wpCiAgTW9uaXRvciByYXRlIChwZXIgc2Vjb25kKQoKICBFLmcu Cgljb25kdmFyMTAuZXhlIDggOCAxMDAwMDAwIC0xMCAxIDAgMTAKCiAgTG9n IGluZm8gaXMgdG8gJ2NvbmR2YXIxMC5sb2cnLgoKICovCgojaW5jbHVkZSA8 c3RkaW8uaD4KI2luY2x1ZGUgPHN5cy90aW1lYi5oPgojaW5jbHVkZSA8c3Rk bGliLmg+CiNpbmNsdWRlIDxzaWduYWwuaD4KI2luY2x1ZGUgImNvbmR2YXIx MC5oIgoKY2hhciAqIGxvZ0ZpbGUgPSAiY29uZHZhcjEwLmxvZyI7Cgpjb25z dCBEV09SRCBNSUxMSVNFQ19QRVJfU0VDCSA9IDEwMDBMOwpjb25zdCBEV09S RCBNSUNST1NFQ19QRVJfTkFOT1NFQyA9IDEwMDBMOwpjb25zdCBEV09SRCBO QU5PU0VDX1BFUl9NSUxMSVNFQyA9IDEwMDAwMDBMOwpjb25zdCBEV09SRCBN SUNST1NFQ19QRVJfU0VDCSA9IDEwMDAwMDBMOwpjb25zdCBEV09SRCBOQU5P U0VDX1BFUl9TRUMJID0gMTAwMDAwMDAwMEw7CgplbnVtIHsKICBSZWNlaXZl ciA9IDAsCiAgU2VuZGVyLAogIE1heFRocmVhZHMgPSAxMDAKfTsKCnB0aHJl YWRfdAkgdGlkWzJdW01heFRocmVhZHNdOwoKdHlwZWRlZiBzdHJ1Y3QgdGhy U3RhdGVfdF8gewogIGludAkJICAgb3A7CiAgaW50CQkgICB3YXRjaGRvZzsK ICBpbnQJCSAgIHNpZ25hbGxlZDsKICBwdGhyZWFkX211dGV4X3QgIG9wTG9j azsKfSB0aHJTdGF0ZV90OwoKdGhyU3RhdGVfdAkgdGhyU3RhdGVbMl1bTWF4 VGhyZWFkc107Cgp2b2lkKgkJIHJlY3ZSZXEodm9pZCAqYXJnKTsKdm9pZCoJ CSBzZW5kUmVxKHZvaWQgKmFyZyk7CnZvaWQJCSBTZW5kRGF0YSgpOwp2b2lk CQkgUmVjdkRhdGEoKTsKaW50CQkgbXNnPTA7CmludAkJIHRyYWNlPTE7Cmlu dAkJIHNlbmRTbGVlcD0wOwppbnQJCSByZWN2U2xlZXA9MDsKaW50CQkgbW9u aXRvclJhdGU9MTA7CgpEV09SRAkJIG1vbml0b3JJbnRlcnZhbDsKRFdPUkQJ CSBjb3VudGVyPTA7CkRXT1JECQkgbGFzdENvdW50PTA7CkRXT1JECQkgcmVj ZWl2ZWQ9MDsKRFdPUkQJCSBUT3M9MDsKCnB0aHJlYWRfbXV0ZXhfdCAgbG9j azsKcHRocmVhZF9jb25kX3QJIHNpZzsKaW50CQkgbm9TdGhyID0gMTsKaW50 CQkgbm9SdGhyID0gMTsKRFdPUkQJCSB0aW1laW50ID0gNSpNSUNST1NFQ19Q RVJfU0VDOyAvLyA1IHNlYwppbnQJCSBUaHJlYWRSZWN2Q291bnRbTWF4VGhy ZWFkc107CmludAkJIFRocmVhZFRPQ291bnRbTWF4VGhyZWFkc107CmludAkJ IFRocmVhZFNlbnRDb3VudFtNYXhUaHJlYWRzXTsKCmVudW0gT3BlcmF0aW9u cyB7CiAgU0xvY2sgCSA9IDB4MDAwMDAwMDEsCiAgRUxvY2sgCSA9IDB4MDAw MDAwMDIsCiAgU1VubG9jawkgPSAweDAwMDAwMDEwLAogIEVVbmxvY2sJID0g MHgwMDAwMDAyMCwKICBTV2FpdCAJID0gMHgwMDAwMDEwMCwKICBFV2FpdCAJ ID0gMHgwMDAwMDIwMCwKICBXYWl0VGltZW91dAkgPSAweDAwMDAwNDAwLAog IFNTaWduYWwJID0gMHgwMDAwMTAwMCwKICBFU2lnbmFsCSA9IDB4MDAwMDIw MDAsCiAgTXNnRmFsc2UJID0gMHg0MDAwMDAwMCwKICBNc2dUcnVlCSA9IDB4 ODAwMDAwMDAsCn07Cgp2b2lkIFJlY3ZEYXRhKGludCB0aHJlYWROdW0pOwp2 b2lkIFNlbmREYXRhKGludCB0aHJlYWROdW0pOwp2b2lkICogcmVjdlJlcSh2 b2lkICphcmcpOwp2b2lkICogc2VuZFJlcSh2b2lkICphcmcpOwoKcHRocmVh ZF9tdXRleF90IExPR1g7CgojZGVmaW5lIE9QRU5MT0coX29wZW5Nb2RlKSBc CiAgeyBcCiAgICBGSUxFICogTE9HRlA7IFwKICAgICh2b2lkKXB0aHJlYWRf bXV0ZXhfbG9jaygmTE9HWCk7IFwKICAgIGlmICgoTE9HRlA9Zm9wZW4obG9n RmlsZSwgX29wZW5Nb2RlKSkgPT0gTlVMTCkgXAogICAgICB7IFwKCWZwcmlu dGYoc3Rkb3V0LCAiTGluZSAlZDogTG9nIG9wZW4gZXJyb3JcbiIsIF9fTElO RV9fKTsgXAoJZmZsdXNoKHN0ZG91dCk7IFwKICAgICAgfSBcCiAgICBlbHNl IFwKICAgICAgewoKI2RlZmluZSBDTE9TRUxPRyhfZXhpdEFmdGVyQ2xvc2Up IFwKCWZjbG9zZShMT0dGUCk7IFwKCWlmKF9leGl0QWZ0ZXJDbG9zZSkgZXhp dCgxKTsgXAogICAgICB9IFwKICAgICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZMT0dYKTsgXAogIH0KCiNkZWZpbmUgTE9HRVJSIFwKICB7IFwKICAg IGlmKHN0YXR1cyE9MCkgXAogICAgICB7IFwKCU9QRU5MT0coImEiKTsgXAoJ ZnByaW50ZihMT0dGUCwiRXJyb3IgYXQgbGluZSAlZCwgc3RhdHVzICVkXG4i LF9fTElORV9fLCBzdGF0dXMpOyBcCglDTE9TRUxPRygxKTsgXAogICAgICB9 IFwKICB9Cgp2b2lkIFBSIChjaGFyICpzKQp7CiAgbG9uZyBpZDsKCiAgaWYo dHJhY2U+MCkKICAgIHsKICAgICAgaWQ9R2V0Q3VycmVudFRocmVhZElkICgp OwoKICAgICAgT1BFTkxPRygiYSIpOwogICAgICBmcHJpbnRmKExPR0ZQLCJU SC0lbHg6JXNcbiIsaWQscyk7CiAgICAgIENMT1NFTE9HKDApOwogICAgfQp9 Cgp2b2lkIFNldE9wKGludCBTUiwgaW50IHRocmVhZE51bSwgaW50IG9wKQp7 CiAgaW50IHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmdGhyU3RhdGVb U1JdW3RocmVhZE51bV0ub3BMb2NrKTsKICBMT0dFUlI7CiAgdGhyU3RhdGVb U1JdW3RocmVhZE51bV0ub3AgPSBvcDsKICBzdGF0dXMgPSBwdGhyZWFkX211 dGV4X3VubG9jaygmdGhyU3RhdGVbU1JdW3RocmVhZE51bV0ub3BMb2NrKTsK ICBMT0dFUlI7Cn0KCnZvaWQgT3JPcChpbnQgU1IsIGludCB0aHJlYWROdW0s IGludCBvcCkKewogIGludCBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2xvY2so JnRoclN0YXRlW1NSXVt0aHJlYWROdW1dLm9wTG9jayk7CiAgTE9HRVJSOwog IHRoclN0YXRlW1NSXVt0aHJlYWROdW1dLm9wIHw9IG9wOwogIHN0YXR1cyA9 IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aHJTdGF0ZVtTUl1bdGhyZWFkTnVt XS5vcExvY2spOwogIExPR0VSUjsKfQoKdm9pZCBTZXRXYXRjaGRvZyhpbnQg U1IsIGludCB0aHJlYWROdW0sIGludCB3b29mKQp7CiAgaW50IHN0YXR1cyA9 IHB0aHJlYWRfbXV0ZXhfbG9jaygmdGhyU3RhdGVbU1JdW3RocmVhZE51bV0u b3BMb2NrKTsKICBMT0dFUlI7CiAgdGhyU3RhdGVbU1JdW3RocmVhZE51bV0u d2F0Y2hkb2cgPSB3b29mOwogIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZ0aHJTdGF0ZVtTUl1bdGhyZWFkTnVtXS5vcExvY2spOwogIExPR0VS UjsKfQoKQk9PTCBsb2dQb2ludChsb25nIGluY3JlbWVudCkKewogIGlmIChj b3VudGVyID49IGxhc3RDb3VudCArIGluY3JlbWVudCkKICAgIHsKICAgICAg bGFzdENvdW50ID0gY291bnRlcjsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9 CgogIHJldHVybiBGQUxTRTsKfQoKdm9pZCBQcmludE9wdGlvbnMgKEZJTEUg KiBmcCkKewogIGZwcmludGYoZnAsICJPcHRpb25zIGFyZSAoaW4gdGhpcyBv cmRlcik6XG4iKTsKICBmcHJpbnRmKGZwLCAiICAlLTMwczogJThsZFxuIiwg Ik51bWJlciBvZiBTZW5kZXIgdGhyZWFkcyIsIG5vU3Rocik7CiAgZnByaW50 ZihmcCwgIiAgJS0zMHM6ICU4bGRcbiIsICJOdW1iZXIgb2YgUmVjZWl2ZXIg dGhyZWFkcyIsIG5vUnRocik7CiAgZnByaW50ZihmcCwgIiAgJS0zMHM6ICU4 bGRcbiIsICJDViB3YWl0IHRpbWUgKG1pY3Jvc2VjcykiLCB0aW1laW50KTsK ICBmcHJpbnRmKGZwLCAiICAlLTMwczogJThsZFxuIiwgIlRyYWNlIGxldmVs IiwgdHJhY2UpOwogIGZwcmludGYoZnAsICIgICUtMzBzOiAlOGxkXG4iLCAi U2VuZGVyIHNsZWVwcyAoYm9vbCkiLCBzZW5kU2xlZXApOwogIGZwcmludGYo ZnAsICIgICUtMzBzOiAlOGxkXG4iLCAiUmVjZWl2ZXIgc2xlZXBzIChib29s KSIsIHJlY3ZTbGVlcCk7CiAgZnByaW50ZihmcCwgIiAgJS0zMHM6ICU4bGRc biIsICJNb25pdG9yIHJhdGUgKHBlciBzZWNvbmQpIiwgbW9uaXRvclJhdGUp OwogIHB1dGMoJ1xuJyxmcCk7Cn0KCmludAptYWluKGludCBhcmdjICwgY2hh ciAqIGFyZ3ZbXSkKewogIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbGE7CiAgaW50 CQkgICAgICBzdGF0dXM7CiAgaW50CQkgICAgICBpaTsKICBEV09SRCAJICAg ICAgbWlsbGlzZWNvbmRzID0gMDsKICBEV09SRCAJICAgICAgbGFzdFNlbmRX YXRjaCA9IDA7CiAgRFdPUkQgCSAgICAgIGxhc3RSZWN2V2F0Y2ggPSAwOwog IGludAkJICAgICAgciA9IDA7CiAgRFdPUkQgCSAgICAgIHNlY29uZHMgPSAw OwogIERXT1JEIAkgICAgICBsYXN0TG9nU2Vjb25kcyA9IDA7CiAgY2hhciAq CSAgICAgIHJvdG9yID0gIi8tXFx8IjsKCiAgaWYoYXJnYz4xKQogICAgewog ICAgICBub1N0aHI9YXRvaShhcmd2WzFdKTsKICAgICAgaWYgKG5vU3RociA+ PSBNYXhUaHJlYWRzKQoJewoJICBwcmludGYoIlJlcXVlc3RlZCB0b28gbWFu eSBTZWNuZGVyIHRocmVhZHMgPSAlZC4gTWF4IGlzICVkXG4iLCBub1N0aHIs IE1heFRocmVhZHMpOwoJICBleGl0KDEpOwoJfQogICAgfQogIGlmKGFyZ2M+ MikKICAgIHsKICAgICAgbm9SdGhyPWF0b2koYXJndlsyXSk7CiAgICAgIGlm IChub1J0aHIgPj0gTWF4VGhyZWFkcykKCXsKCSAgcHJpbnRmKCJSZXF1ZXN0 ZWQgdG9vIG1hbnkgUmVjZWl2ZXIgdGhyZWFkcyA9ICVkLiBNYXggaXMgJWRc biIsIG5vUnRociwgTWF4VGhyZWFkcyk7CgkgIGV4aXQoMSk7Cgl9CiAgICB9 CiAgaWYoYXJnYz4zKQogICAgewogICAgICB0aW1laW50PWF0b2koYXJndlsz XSk7CiAgICB9CiAgaWYoYXJnYz40KQogICAgewogICAgICB0cmFjZT1hdG9p KGFyZ3ZbNF0pOwogICAgfQogIGlmKGFyZ2M+NSkKICAgIHsKICAgICAgc2Vu ZFNsZWVwPWF0b2koYXJndls1XSk7CiAgICB9CiAgaWYoYXJnYz42KQogICAg ewogICAgICByZWN2U2xlZXA9YXRvaShhcmd2WzZdKTsKICAgIH0KICBpZihh cmdjPjcpCiAgICB7CiAgICAgIG1vbml0b3JSYXRlPWF0b2koYXJndls3XSk7 CiAgICAgIC8vIFJvdW5kIHRvIG5lYXJlc3QgMTAgc28gdGhhdCAxMDAwbXMg KDEgc2VjKSBpcyBhIG11bHRpcGxlIG9mIHRoZSBpbnRlcnZhbAogICAgICBt b25pdG9yUmF0ZT0oKG1vbml0b3JSYXRlKzUpLzEwKSoxMDsKICAgIH0KCiAg bW9uaXRvckludGVydmFsID0gTUlMTElTRUNfUEVSX1NFQy9tb25pdG9yUmF0 ZTsKCiAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmxhKSAhPSAwCiAg ICAgIHx8IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmxhLCBQVEhSRUFE X01VVEVYX0VSUk9SQ0hFQ0spICE9IDAKICAgICAgfHwgcHRocmVhZF9tdXRl eF9pbml0KCZMT0dYLCAmbGEpICE9IDApCiAgICB7CiAgICAgIHByaW50Zigi TGluZSAlZDogRXJyb3IgaW5pdGlhbGlzaW5nIGxvZyBtdXRleC5cbiIsIF9f TElORV9fKTsKICAgICAgZXhpdCgxKTsKICAgIH0KCiAgc3RhdHVzID0gcHRo cmVhZF9tdXRleF9pbml0KCZsb2NrLCAmbGEpOwogIExPR0VSUjsKICBzdGF0 dXMgPSBwdGhyZWFkX2NvbmRfaW5pdCgmc2lnLCBOVUxMKTsKICBMT0dFUlI7 CgogIFByaW50T3B0aW9ucyhzdGRvdXQpOwogIGZmbHVzaChzdGRvdXQpOwog IE9QRU5MT0coInciKTsKICBQcmludE9wdGlvbnMoTE9HRlApOwogIENMT1NF TE9HKDApOwoKICBmb3IoaWkgPSAwOyBpaSA8IG5vUnRocjsgaWkrKykKICAg IHsKICAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF9pbml0KCZ0aHJTdGF0 ZVtSZWNlaXZlcl1baWldLm9wTG9jaywgJmxhKTsKICAgICAgTE9HRVJSOwog ICAgICBzdGF0dXMgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkW1JlY2VpdmVyXVtp aV0sIE5VTEwsIChQVEhSRUFEX1NUQVJUX1JPVVRJTkVfREVDTCkmcmVjdlJl cSwgKHZvaWQgKilpaSk7CiAgICAgIExPR0VSUjsKICAgIH0KICBmb3IoaWkg PSAwOyBpaSA8IG5vU3RocjsgaWkrKykKICAgIHsKICAgICAgc3RhdHVzID0g cHRocmVhZF9tdXRleF9pbml0KCZ0aHJTdGF0ZVtTZW5kZXJdW2lpXS5vcExv Y2ssICZsYSk7CiAgICAgIExPR0VSUjsKICAgICAgc3RhdHVzID0gcHRocmVh ZF9jcmVhdGUoJnRpZFtTZW5kZXJdW2lpXSwgTlVMTCwgKFBUSFJFQURfU1RB UlRfUk9VVElORV9ERUNMKSZzZW5kUmVxLCAodm9pZCAqKWlpKTsKICAgICAg TE9HRVJSOwogICAgfQoKICBzdGF0dXMgPSBwdGhyZWFkX211dGV4YXR0cl9k ZXN0cm95KCZsYSk7CiAgTE9HRVJSOwoKICB3aGlsZSgxKSAvL01vbml0b3Ig dGhyZWFkcyB1bnRpbCB0aGV5IGhhbmcKICAgIHsKICAgICAgaW50IHN0aWxs UnVubmluZzsKICAgICAgQk9PTCBuZXdTZWNvbmQ7CgogICAgICBTbGVlcCht b25pdG9ySW50ZXJ2YWwpOwogICAgICBtaWxsaXNlY29uZHMrPW1vbml0b3JJ bnRlcnZhbDsKICAgICAgbmV3U2Vjb25kID0gKG1pbGxpc2Vjb25kcyA+PSBN SUxMSVNFQ19QRVJfU0VDKTsKCiAgICAgIHB1dGNoYXIocm90b3Jbcj0oKHIr KykmMHgzKV0pOwogICAgICBwdXRjaGFyKCdcYicpOwoKICAgICAgLy8gTG9n IFNlbmRzIGFuZCBSZWNlaXZlcy9UaW1lb3V0cwogICAgICBpZiAodHJhY2Ug PiAwCgkgIHx8ICh0cmFjZSA8IDAgJiYgdHJhY2UgPj0gLTUwMDAKCSAgICAg ICYmIChsb2dQb2ludCgtdHJhY2UpIHx8IHNlY29uZHMgPiBsYXN0TG9nU2Vj b25kcyArIDEgLyogQXQgbGVhc3QgMSBzZWNvbmQgKi8pKSkKCXsKCSAgaW50 IGlpOwoKCSAgbGFzdExvZ1NlY29uZHMgPSBzZWNvbmRzOwoKCSAgT1BFTkxP RygiYSIpOwoJICBmcHJpbnRmKExPR0ZQLCJjb3VudD0lMDEwbGQsIFRoci9S ZWN2ZC9UT3MiLAoJCQljb3VudGVyKTsKCgkgIGZvciAoaWk9MDtpaTxub1J0 aHI7aWkrKykKCSAgICB7CgkgICAgICBmcHJpbnRmKExPR0ZQLCAiICVkLyUw NGQvJTA0ZCIsCgkJCSAgICAgaWksCgkJCSAgICAgVGhyZWFkUmVjdkNvdW50 W2lpXSwKCQkJICAgICBUaHJlYWRUT0NvdW50W2lpXSk7CgoJICAgICAgVGhy ZWFkUmVjdkNvdW50W2lpXT0wOwoJICAgICAgVGhyZWFkVE9Db3VudFtpaV09 MDsKCSAgICB9CgkgIGZwcmludGYoTE9HRlAsIiA6IFRoci9TZW50Iik7Cgkg IGZvciAoaWk9MDtpaTxub1N0aHI7aWkrKykKCSAgICB7CgkgICAgICBmcHJp bnRmKExPR0ZQLCAiICVkLyUwNGQiLAoJCQkgICAgIGlpLAoJCQkgICAgIFRo cmVhZFNlbnRDb3VudFtpaV0pOwoKCSAgICAgIFRocmVhZFNlbnRDb3VudFtp aV09MDsKCSAgICB9CgkgIHB1dGMoJ1xuJyxMT0dGUCk7CgkgIENMT1NFTE9H KDApOwoJfQoKICAgICAgLy8gQ2hlY2sgZm9yIGh1bmcgdGhyZWFkcy4KICAg ICAgc3RpbGxSdW5uaW5nPW5vU3RocjsKICAgICAgaWYgKCFzZW5kU2xlZXAK CSAgfHwgc2Vjb25kcyA+IChsYXN0U2VuZFdhdGNoICsgKDIqdGltZWludC9N SUNST1NFQ19QRVJfU0VDKSkpCgl7CgkgIGZvciAoaWk9MDtpaTxub1N0aHI7 aWkrKykKCSAgICB7CgkgICAgICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2xv Y2soJnRoclN0YXRlW1NlbmRlcl1baWldLm9wTG9jayk7CgkgICAgICBMT0dF UlI7CgkgICAgICBpZiAodGhyU3RhdGVbU2VuZGVyXVtpaV0uc2lnbmFsbGVk ID09IDApCgkJewoJCSAgT1BFTkxPRygiYSIpOwoJCSAgZnByaW50ZihMT0dG UCwgIlRocmVhZCAlMmQ6IGRpZG4ndCBlbWl0IHNpZ25hbC5cbiIsCgkJCQkg aWkpOwoJCSAgQ0xPU0VMT0coMCk7CgkJfQoKCSAgICAgIHRoclN0YXRlW1Nl bmRlcl1baWldLnNpZ25hbGxlZCA9IDA7CgoJICAgICAgaWYgKHRoclN0YXRl W1NlbmRlcl1baWldLndhdGNoZG9nID09IDApCgkJewoJCSAgc3RpbGxSdW5u aW5nLS07CgkJICBPUEVOTE9HKCJhIik7CgkJICBmcHJpbnRmKExPR0ZQLCAi VGhyZWFkICVkOiBTZW5kZXIgb3BlcmF0aW9uIHRyYWNlOiAweCV4XG4iLAoJ CQkJIGlpLAoJCQkJIHRoclN0YXRlW1NlbmRlcl1baWldLm9wKTsKCQkgIENM T1NFTE9HKDApOwoJCX0KCSAgICAgIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZ0aHJTdGF0ZVtTZW5kZXJdW2lpXS5vcExvY2spOwoJICAgICAg TE9HRVJSOwoJICAgIH0KCSAgaWYgKHN0aWxsUnVubmluZz09MCkKCSAgICB7 CgkgICAgICBPUEVOTE9HKCJhIik7CgkgICAgICBmcHJpbnRmKExPR0ZQLCJM aW5lICVkOiBleGl0LlxuIiwgX19MSU5FX18pOwoJICAgICAgQ0xPU0VMT0co MCk7CgkgICAgICBleGl0KDEpOwoJICAgIH0KCX0KCiAgICAgIGlmICghKHJl Y3ZTbGVlcCB8fCBzZW5kU2xlZXApCgkgIHx8IChyZWN2U2xlZXAgJiYgc2Vj b25kcyA+IChsYXN0UmVjdldhdGNoICsgKDIqdGltZWludC9NSUNST1NFQ19Q RVJfU0VDKSkpCgkgIHx8IChzZW5kU2xlZXAgJiYgc2Vjb25kcyA+IChsYXN0 U2VuZFdhdGNoICsgKDIqdGltZWludC9NSUNST1NFQ19QRVJfU0VDKSkpKQoJ ewoJICBzdGlsbFJ1bm5pbmc9bm9SdGhyOwoJICBmb3IgKGlpPTA7aWk8bm9S dGhyO2lpKyspCgkgICAgewoJICAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRl eF9sb2NrKCZ0aHJTdGF0ZVtSZWNlaXZlcl1baWldLm9wTG9jayk7CgkgICAg ICBMT0dFUlI7CgkgICAgICBpZiAodGhyU3RhdGVbUmVjZWl2ZXJdW2lpXS53 YXRjaGRvZyA9PSAwKQoJCXsKCQkgIHN0aWxsUnVubmluZy0tOwoJCSAgT1BF TkxPRygiYSIpOwoJCSAgZnByaW50ZihMT0dGUCwgIlRocmVhZCAlZDogUmVj ZWl2ZXIgb3BlcmF0aW9uIHRyYWNlOiAweCV4XG4iLAoJCQkJIGlpLAoJCQkJ IHRoclN0YXRlW1JlY2VpdmVyXVtpaV0ub3ApOwoJCSAgQ0xPU0VMT0coMCk7 CgkJfQoJICAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF91bmxvY2soJnRo clN0YXRlW1JlY2VpdmVyXVtpaV0ub3BMb2NrKTsKCSAgICAgIExPR0VSUjsK CSAgICB9CgkgIGlmIChzdGlsbFJ1bm5pbmc9PTApCgkgICAgewoJICAgICAg T1BFTkxPRygiYSIpOwoJICAgICAgZnByaW50ZihMT0dGUCwiTGluZSAlZDog ZXhpdC5cbiIsIF9fTElORV9fKTsKCSAgICAgIENMT1NFTE9HKDApOwoJICAg ICAgZXhpdCgxKTsKCSAgICB9Cgl9CgogICAgICBpZiAobmV3U2Vjb25kKQoJ ewoJICBtaWxsaXNlY29uZHMgPSAwOwoJICBzZWNvbmRzKys7CgkgIE9QRU5M T0coImEiKTsKCSAgZnByaW50ZihMT0dGUCwgIj09U2Vjb25kcz1bJWxkXT09 TXNnPVslZF09PUNvdW50PVslbGRdPT1SZWNlaXZlZD1bJWxkXT09VE9zPVsl bGRdPT09PVxuIiwgXAoJCQkgc2Vjb25kcywKCQkJIG1zZywKCQkJIGNvdW50 ZXIsCgkJCSByZWNlaXZlZCwKCQkJIFRPcyk7CgoJICBmb3IgKGlpPTA7aWk8 bm9SdGhyO2lpKyspCgkgICAgewoJICAgICAgZnByaW50ZihMT0dGUCwgIiAl ZC8lMDRkLyUwNGQiLAoJCQkgICAgIGlpLAoJCQkgICAgIFRocmVhZFJlY3ZD b3VudFtpaV0sCgkJCSAgICAgVGhyZWFkVE9Db3VudFtpaV0pOwoKCSAgICAg IFRocmVhZFJlY3ZDb3VudFtpaV09MDsKCSAgICAgIFRocmVhZFRPQ291bnRb aWldPTA7CgkgICAgfQoJICBmcHJpbnRmKExPR0ZQLCIgOiBUaHIvU2VudCIp OwoJICBmb3IgKGlpPTA7aWk8bm9TdGhyO2lpKyspCgkgICAgewoJICAgICAg ZnByaW50ZihMT0dGUCwgIiAlZC8lMDRkIiwKCQkJICAgICBpaSwKCQkJICAg ICBUaHJlYWRTZW50Q291bnRbaWldKTsKCgkgICAgICBUaHJlYWRTZW50Q291 bnRbaWldPTA7CgkgICAgfQoJICBwdXRjKCdcbicsTE9HRlApOwoKCSAgZm9y IChpaT0wO2lpPG5vU3RocjtpaSsrKQoJICAgewoJICAgICAgc3RhdHVzID0g cHRocmVhZF9tdXRleF9sb2NrKCZ0aHJTdGF0ZVtTZW5kZXJdW2lpXS5vcExv Y2spOwoJICAgICAgTE9HRVJSOwoJICAgICAgZnByaW50ZihMT0dGUCwgIlMl ZC8weCV4ICIsCgkJCSAgICAgaWksCgkJCSAgICAgdGhyU3RhdGVbU2VuZGVy XVtpaV0ub3ApOwoJICAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF91bmxv Y2soJnRoclN0YXRlW1NlbmRlcl1baWldLm9wTG9jayk7CgkgICAgICBMT0dF UlI7CgkgICAgfQoJICBwdXRjKCdcbicsTE9HRlApOwoJICBmb3IgKGlpPTA7 aWk8bm9SdGhyO2lpKyspCgkgICAgewoJICAgICAgc3RhdHVzID0gcHRocmVh ZF9tdXRleF9sb2NrKCZ0aHJTdGF0ZVtSZWNlaXZlcl1baWldLm9wTG9jayk7 CgkgICAgICBMT0dFUlI7CgkgICAgICBmcHJpbnRmKExPR0ZQLCAiUiVkLzB4 JXggIiwKCQkJICAgICBpaSwKCQkJICAgICB0aHJTdGF0ZVtSZWNlaXZlcl1b aWldLm9wKTsKCSAgICAgIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZ0aHJTdGF0ZVtSZWNlaXZlcl1baWldLm9wTG9jayk7CgkgICAgICBMT0dF UlI7CgkgICAgfQoJICBwdXRjKCdcbicsTE9HRlApOwoKCSAgQ0xPU0VMT0co MCk7CgoJICAvLyBSZXNldCB3YXRjaGRvZ3MKI2lmIDEKCSAgaWYgKCFzZW5k U2xlZXAKCSAgICAgIHx8IChzZW5kU2xlZXAgJiYgc2Vjb25kcyA+IChsYXN0 U2VuZFdhdGNoICsgKDIqdGltZWludC9NSUNST1NFQ19QRVJfU0VDKSkpKQoJ ICAgIHsKCSAgICAgIGxhc3RTZW5kV2F0Y2ggPSBzZWNvbmRzOwoJICAgICAg Zm9yIChpaT0wO2lpPG5vU3RocjtpaSsrKQoJCXsKCQkgIFNldFdhdGNoZG9n KFNlbmRlcixpaSwwKTsKCQl9CgkgICAgfQoJICBpZiAoIShyZWN2U2xlZXAg fHwgc2VuZFNsZWVwKQoJICAgICAgfHwgKHJlY3ZTbGVlcCAmJiBzZWNvbmRz ID4gKGxhc3RSZWN2V2F0Y2ggKyAoMip0aW1laW50L01JQ1JPU0VDX1BFUl9T RUMpKSkKCSAgICAgIHx8IChzZW5kU2xlZXAgJiYgc2Vjb25kcyA+IChsYXN0 U2VuZFdhdGNoICsgKDIqdGltZWludC9NSUNST1NFQ19QRVJfU0VDKSkpKQoJ ICAgIHsKCSAgICAgIGxhc3RSZWN2V2F0Y2ggPSBzZWNvbmRzOwoJICAgICAg Zm9yIChpaT0wO2lpPG5vUnRocjtpaSsrKQoJCXsKCQkgIFNldFdhdGNoZG9n KFJlY2VpdmVyLGlpLDApOwoJCX0KCSAgICB9CiNlbmRpZgoJfQogICAgfQog IHJldHVybiAwOwp9CgovLy8vLy8vLy8vLy8vCnZvaWQgKgpzZW5kUmVxKHZv aWQgKmFyZykKewogIGludCB0aHIgPSAoaW50KWFyZzsKICBEV09SRCBzbGVl cFRpbWVfbXMgPSAoMip0aW1laW50Kk1JTExJU0VDX1BFUl9TRUMpL01JQ1JP U0VDX1BFUl9TRUM7CgogIE9QRU5MT0coImEiKTsKICBmcHJpbnRmKExPR0ZQ LCAiU2VuZGVyIFRocmVhZCAlMmQgaWQgJWx4IHN0YXJ0ZWQ6IiwgdGhyLCBH ZXRDdXJyZW50VGhyZWFkSWQoKSk7CiAgaWYgKHNlbmRTbGVlcCkKICAgIHsK ICAgICAgZnByaW50ZihMT0dGUCwgIiBzbGVlcCB0aW1lICVsZCBtcyIsIHNs ZWVwVGltZV9tcyk7CiAgICB9CiAgcHV0YygnXG4nLCBMT0dGUCk7CiAgQ0xP U0VMT0coMCk7CgogIHRoclN0YXRlW1NlbmRlcl1bdGhyXS53YXRjaGRvZyA9 IDE7CiAgdGhyU3RhdGVbU2VuZGVyXVt0aHJdLnNpZ25hbGxlZCA9IDA7Cgog IHdoaWxlKDEpCiAgICB7CiAgICAgIFNldFdhdGNoZG9nKFNlbmRlcix0aHIs MSk7CiAgICAgIFNlbmREYXRhKHRocik7CiAgICAgIC8vIE5vdGU6IElmIHRp bWVpbnQgPCA1MDAgbWljcm9zZWNvbmRzIHdlIGp1c3QgeWllbGQgdGhlIENQ VQogICAgICAvLyB3aXRoIFNsZWVwKDApLgogICAgICBpZiAoc2VuZFNsZWVw KQoJewoJICBTbGVlcChzbGVlcFRpbWVfbXMpOwoJfQogICAgfQoKICByZXR1 cm4gMDsKfQoKLy8vLy8vLy8vLy8vLwp2b2lkClNlbmREYXRhKGludCB0aHJl YWROdW0pCnsKICBpbnQgc3RhdHVzOwoKICBTZXRPcChTZW5kZXIsdGhyZWFk TnVtLFNMb2NrKTsKICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2xvY2soJmxv Y2spOwogIE9yT3AoU2VuZGVyLHRocmVhZE51bSxFTG9jayk7CiAgTE9HRVJS OwogIFBSKCJsb2NrIC0wMSIpOwoKICBpZihtc2c9PTApCiAgICB7CiAgICAg IE9yT3AoU2VuZGVyLHRocmVhZE51bSxNc2dGYWxzZSk7CiAgICAgIG1zZz0x OwogICAgICBjb3VudGVyKys7CiAgICAgIFRocmVhZFNlbnRDb3VudFt0aHJl YWROdW1dKys7CgogICAgICBQUigidW5sb2NrIC0wMSIpOwogICAgICBPck9w KFNlbmRlcix0aHJlYWROdW0sU1VubG9jayk7CiAgICAgIHN0YXR1cz1wdGhy ZWFkX211dGV4X3VubG9jaygmbG9jayk7CiAgICAgIE9yT3AoU2VuZGVyLHRo cmVhZE51bSxFVW5sb2NrKTsKICAgICAgTE9HRVJSOwogICAgICBQUigic2ln bmFsIC0wMSIpOwogICAgICBPck9wKFNlbmRlcix0aHJlYWROdW0sU1NpZ25h bCk7CiAgICAgIHN0YXR1cyA9IHB0aHJlYWRfY29uZF9zaWduYWwoJnNpZyk7 CiAgICAgIE9yT3AoU2VuZGVyLHRocmVhZE51bSxFU2lnbmFsKTsKICAgICAg TE9HRVJSOwogICAgICB0aHJTdGF0ZVtTZW5kZXJdW3RocmVhZE51bV0uc2ln bmFsbGVkKys7CiAgICB9CiAgZWxzZQogICAgewogICAgICBPck9wKFNlbmRl cix0aHJlYWROdW0sTXNnVHJ1ZSk7CiAgICAgIFBSKCJ1bmxvY2sgLTAxIik7 CiAgICAgIE9yT3AoU2VuZGVyLHRocmVhZE51bSxTVW5sb2NrKTsKICAgICAg c3RhdHVzPXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKTsKICAgICAgT3JP cChTZW5kZXIsdGhyZWFkTnVtLEVVbmxvY2spOwogICAgICBMT0dFUlI7CiAg ICB9Cn0KCi8vLy8vLy8vLy8vLy8vLwp2b2lkICoKcmVjdlJlcSh2b2lkICph cmcpCnsKICBpbnQgdGhyID0gKGludClhcmc7CiAgT1BFTkxPRygiYSIpOwog IGZwcmludGYoTE9HRlAsICJSZWNlaXZlciBUaHJlYWQgJTJkIGlkICVseCBz dGFydGVkXG4iLCB0aHIsIEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKICBDTE9T RUxPRygwKTsKCiAgdGhyU3RhdGVbUmVjZWl2ZXJdW3Rocl0ud2F0Y2hkb2cg PSAxOwogIFRocmVhZFJlY3ZDb3VudFt0aHJdPTA7CiAgVGhyZWFkVE9Db3Vu dFt0aHJdPTA7CgogIHdoaWxlKDEpCiAgICB7CiAgICAgIFNldFdhdGNoZG9n KFJlY2VpdmVyLHRociwxKTsKICAgICAgUmVjdkRhdGEodGhyKTsKICAgICAg aWYgKHJlY3ZTbGVlcCkKCXsKCSAgU2xlZXAoMCk7Cgl9CiAgICB9CgogIHJl dHVybiAwOwp9CgovLy8vLy8vLy8vLy8vLy8Kdm9pZApSZWN2RGF0YShpbnQg dGhyZWFkTnVtKQp7CiAgaW50IHN0YXR1czsKCiAgU2V0T3AoUmVjZWl2ZXIs dGhyZWFkTnVtLFNMb2NrKTsKICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2xv Y2soJmxvY2spOwogIE9yT3AoUmVjZWl2ZXIsdGhyZWFkTnVtLEVMb2NrKTsK ICBMT0dFUlI7CiAgUFIoImxvY2sgLTExIik7CgogIHdoaWxlIChtc2cgPT0g MCkKICAgIHsKICAgICAgc3RydWN0IHRpbWVzcGVjIGFic3RpbWU7CiAgICAg IHN0cnVjdCBfdGltZWIgY3VyclN5c1RpbWU7CgogICAgICBPck9wKFJlY2Vp dmVyLHRocmVhZE51bSxNc2dGYWxzZSk7CiAgICAgIF9mdGltZSgmY3VyclN5 c1RpbWUpOwoKICAgICAgYWJzdGltZS50dl9zZWMgPSBjdXJyU3lzVGltZS50 aW1lOwogICAgICBhYnN0aW1lLnR2X25zZWMgPSBOQU5PU0VDX1BFUl9NSUxM SVNFQyAqIGN1cnJTeXNUaW1lLm1pbGxpdG07CgovLwlwcmludGYoIk5vdzog JWxkLiVsZFxuIiwgYWJzdGltZS50dl9zZWMsIGFic3RpbWUudHZfbnNlYyk7 Ci8vCWZmbHVzaChzdGRvdXQpOwoKICAgICAgYWJzdGltZS50dl9uc2VjICs9 ICh0aW1laW50JU1JQ1JPU0VDX1BFUl9TRUMpKk1JQ1JPU0VDX1BFUl9OQU5P U0VDOwogICAgICBpZiAoYWJzdGltZS50dl9uc2VjID49IE5BTk9TRUNfUEVS X1NFQykKCXsKCSAgYWJzdGltZS50dl9uc2VjIC09IE5BTk9TRUNfUEVSX1NF QzsKCSAgYWJzdGltZS50dl9zZWMrKzsKCX0KICAgICAgYWJzdGltZS50dl9z ZWMgKz0gdGltZWludC9NSUNST1NFQ19QRVJfU0VDOwoKLy8JcHJpbnRmKCJU TyA6ICVsZC4lbGRcbiIsIGFic3RpbWUudHZfc2VjLCBhYnN0aW1lLnR2X25z ZWMpOwovLwlmZmx1c2goc3Rkb3V0KTsKCiAgICAgIFBSKCJ3YWl0L3VubG9j ayAtMTEiKTsKICAgICAgT3JPcChSZWNlaXZlcix0aHJlYWROdW0sU1dhaXQp OwogICAgICBzdGF0dXMgPSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZzaWcs ICZsb2NrLCAmYWJzdGltZSk7CiAgICAgIE9yT3AoUmVjZWl2ZXIsdGhyZWFk TnVtLEVXYWl0KTsKICAgICAgUFIoImxvY2svYXdha2UgLTExIik7CgogICAg ICBpZiAoc3RhdHVzID09IEVUSU1FRE9VVCkKCXsKCSAgVGhyZWFkVE9Db3Vu dFt0aHJlYWROdW1dKys7CgkgIFRPcysrOwoJICBQUigidGltZW91dCAtMTEi KTsKCSAgUFIoInVubG9jayAtMTEiKTsKCSAgT3JPcChSZWNlaXZlcix0aHJl YWROdW0sV2FpdFRpbWVvdXQpOwoJICBPck9wKFJlY2VpdmVyLHRocmVhZE51 bSxTVW5sb2NrKTsKCSAgc3RhdHVzPXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZs b2NrKTsKCSAgT3JPcChSZWNlaXZlcix0aHJlYWROdW0sRVVubG9jayk7Cgkg IExPR0VSUjsKCSAgcmV0dXJuIDsKCX0KCiAgICAgIExPR0VSUjsKICAgIH0K CiAgaWYgKG1zZz09MSkKICAgIHsKICAgICAgT3JPcChSZWNlaXZlcix0aHJl YWROdW0sTXNnVHJ1ZSk7CiAgICB9CiAgVGhyZWFkUmVjdkNvdW50W3RocmVh ZE51bV0rKzsKICBtc2c9MDsKICByZWNlaXZlZCsrOwoKICBQUigidW5sb2Nr IC0xMSIpOwogIE9yT3AoUmVjZWl2ZXIsdGhyZWFkTnVtLFNVbmxvY2spOwog IHN0YXR1cz1wdGhyZWFkX211dGV4X3VubG9jaygmbG9jayk7CiAgT3JPcChS ZWNlaXZlcix0aHJlYWROdW0sRVVubG9jayk7CiAgTE9HRVJSOwoKICByZXR1 cm4gOwp9Cgo= --------------040506050703080101040707 Content-Type: type=text/plain; name="condvar10.h" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="condvar10.h" Content-length: 1042 I2lmbmRlZiBfQ09ORFZBUjEwX0gNCiNkZWZpbmUgX0NPTkRWQVIxMF9IDQoN CiNpZmRlZiAgX19jcGx1c3BsdXMNCmV4dGVybiAiQyIgew0KI2VuZGlmDQoN CiNkZWZpbmUgcHRocmVhZF9hdHRyX2RlZmF1bHQgKHB0aHJlYWRfYXR0cl90 ICopIE5VTEwNCiNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfZGVmYXVsdCAo cHRocmVhZF9tdXRleGF0dHJfdCAqKSBOVUxMDQojZGVmaW5lIHB0aHJlYWRf Y29uZGF0dHJfZGVmYXVsdCAocHRocmVhZF9jb25kYXR0cl90ICopIE5VTEwN Cg0KdHlwZWRlZiB2b2lkKigqUFRIUkVBRF9TVEFSVF9ST1VUSU5FX0RFQ0wp KHZvaWQqKTsNCg0KI2luY2x1ZGUgPHNlbWFwaG9yZS5oPg0KI2luY2x1ZGUg PHB0aHJlYWQuaD4NCiNpbmNsdWRlIDx3aW5kb3dzLmg+DQoNCnR5cGVkZWYg c3RydWN0DQp7DQogIGxvbmcgICAgdHZfc2VjOw0KICBsb25nICAgIHR2X25z ZWM7DQp9IHRpbWVzdHJ1Y190Ow0KDQovL1RoZSBmb2xsb3dpbmcgbWFjcm8g aXMgdXNlZCB0YWtlIGNhcmUgb2YgY2F0Y2goLi4uKSBwcmVzZW50IGluDQov L3RocmVhZCBjb2RlLCBhcyByZXF1aXJlZCBieSBwdGhyZWFkIGxpYnJhcnkg Zm9yIE5UIHdoZW4gY29tcGlsaW5nDQovLyB3aXRoIE1TVkMrKy4NCiNpZmRl ZiBQdFczMkNhdGNoQWxsDQojZGVmaW5lIHBzQ2F0Y2ggUHRXMzJDYXRjaEFs bA0KI2Vsc2UNCiNkZWZpbmUgcHNDYXRjaCBjYXRjaCguLi4pDQojZW5kaWYN Cg0KI2lmZGVmICBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZg0K DQo= --------------040506050703080101040707 Content-Type: text/plain; name="Makefile" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="Makefile" Content-length: 2221 Q1AJPSBjb3B5DQpSTQk9IGVyYXNlDQpNS0RJUgk9IG1rZGlyDQpUT1VDSAk9 IGVjaG8gUGFzc2VkID4NCkVDSE8JPSBAZWNobw0KDQpDUEhEUgk9IHB0aHJl YWQuaCBzZW1hcGhvcmUuaCBzY2hlZC5oDQoNCiNPUFRJTQk9IC9PMiAvT2Iy DQpPUFRJTQkJPQ0KDQojIEMrKyBFeGNlcHRpb25zDQpWQ0VGTEFHUwk9IC9H WCAvVFAgL0RQdFczMk5vQ2F0Y2hXYXJuIC9EX19DTEVBTlVQX0NYWA0KVkNF TElCCT0gLi4vbGliL3B0aHJlYWRWQ0UubGliDQpWQ0VETEwJPSBwdGhyZWFk VkNFLmRsbA0KIyBTdHJ1Y3R1cmVkIEV4Y2VwdGlvbnMNClZTRUZMQUdTCT0g L0RfX0NMRUFOVVBfU0VIDQpWU0VMSUIJPSAuLi9saWIvcHRocmVhZFZTRS5s aWINClZTRURMTAk9IHB0aHJlYWRWU0UuZGxsDQojIEMgY2xlYW51cCBjb2Rl DQpWQ0ZMQUdTCT0gL0RfX0NMRUFOVVBfQw0KVkNMSUIJCT0gLi4vbGliL3B0 aHJlYWRWQy5saWINClZDRExMCQk9IHB0aHJlYWRWQy5kbGwNCiMgQysrIEV4 Y2VwdGlvbnMgaW4gYXBwbGljYXRpb24gLSB1c2luZyBWQyB2ZXJzaW9uIG9m IHB0aHJlYWRzIGRsbA0KVkNYRkxBR1MJPSAvR1ggL1RQIC9EX19DTEVBTlVQ X0MNCg0KQ0ZMQUdTPSAkKE9QVElNKSAvVzMgL1dYIC9NRCAvbm9sb2dvIC9Z ZCAvWmkgLURfV0lOMzJfV0lOTlQ9MHg0MDANCkxGTEFHUz0gL0lOQ1JFTUVO VEFMOk5PDQpJTkNMVURFUz0tSS4gLUkuLi9pbmNsdWRlDQoNCkNPUFlGSUxF Uwk9ICQoQ1BIRFIpICQoQ1BMSUIpICQoQ1BETEwpDQoNClRFU1QJCT0gY29u ZHZhcjEwLmV4ZQ0KRUhGTEFHUwk9DQoNCmRlZmF1bHQ6IFZDDQoNClZDRToN CglAIG5tYWtlIENQTElCPSIkKFZDRUxJQikiIENQRExMPSIkKFZDRURMTCki IEVIRkxBR1M9IiQoVkNFRkxBR1MpIiAkKFRFU1QpDQoNClZTRToNCglAIG5t YWtlIENQTElCPSIkKFZTRUxJQikiIENQRExMPSIkKFZTRURMTCkiIEVIRkxB R1M9IiQoVlNFRkxBR1MpIiAkKFRFU1QpDQoNClZDOg0KCUAgbm1ha2UgQ1BM SUI9IiQoVkNMSUIpIiBDUERMTD0iJChWQ0RMTCkiIEVIRkxBR1M9IiQoVkNG TEFHUykiICQoVEVTVCkNCg0KVkNYOg0KCUAgbm1ha2UgQ1BMSUI9IiQoVkNM SUIpIiBDUERMTD0iJChWQ0RMTCkiIEVIRkxBR1M9IiQoVkNYRkxBR1MpIiAk KFRFU1QpDQoNCg0KDQouYy5leGU6DQoJQCAkKEVDSE8pICQoQ0MpICQoRUhG TEFHUykgJChDRkxBR1MpICQoSU5DTFVERVMpICQ8IC9GZSRAIC9saW5rICQo TEZMQUdTKSAkKENQTElCKQ0KCUAgJChDQykgJChFSEZMQUdTKSAkKENGTEFH UykgJChJTkNMVURFUykgJDwgL0ZlJEAgL2xpbmsgJChMRkxBR1MpICQoQ1BM SUIpDQoNCi5jLmk6DQoJQCAkKENDKSAvUCAkKFZDRUZMQUdTKSAkKENGTEFH UykgJChJTkNMVURFUykgJDwNCg0KJChDT1BZRklMRVMpOg0KCUAgJChFQ0hP KSBDb3B5aW5nICRADQoJQCAkKENQKSAkKEJVSUxEX0RJUilcJEAgLg0KDQpw dGhyZWFkLmRsbDoNCglAICQoQ1ApICQoQ1BETEwpICQqLmRsbA0KCUAgJChD UCkgJChDUExJQikgJCoubGliDQoNCmNsZWFuOg0KCS0gJChSTSkgKi5lDQoJ LSAkKFJNKSAqLmkNCgktICQoUk0pICoub2JqDQoJLSAkKFJNKSAqLnBkYg0K CS0gJChSTSkgKi5vDQoJLSAkKFJNKSAqLmFzbQ0KCS0gJChSTSkgKi5leGUN CgktICQoUk0pICoubG9nDQo= --------------040506050703080101040707 Content-Type: text/plain; name="GNUmakefile" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="GNUmakefile" Content-length: 1550 Q1AJPSBjb3B5DQpNVgk9IHJlbmFtZQ0KUk0JPSBlcmFzZQ0KTUtESVIJPSBt a2Rpcg0KVE9VQ0gJPSBlY2hvIFBhc3NlZCA+DQpFQ0hPCT0gQGVjaG8NCk1B S0UJPSBtYWtlDQoNCiMNCiMgTWluZ3czMg0KIw0KR0xBTkcJPSBjKysNCkND CT0gZ2NjDQpYWENGTEFHUwk9IA0KQ0ZMQUdTCT0gLU8zIC1nIC1VTkRFQlVH IC1XYWxsICQoWFhDRkxBR1MpDQojQ0ZMQUdTCT0gLWcgLU8wIC1VTkRFQlVH IC1XYWxsICQoWFhDRkxBR1MpDQpJTkNMVURFUwk9IC1JLiAtSS4uL2luY2x1 ZGUNCkxJQkRJUlMJPSAtTC4gLUwuLi9saWINCg0KR0NYCT0gRFVNTVkNCkhE Ugk9IHB0aHJlYWQuaCBzZW1hcGhvcmUuaCBzY2hlZC5oDQpMSUIJPSAuLi9s aWIvbGlicHRocmVhZCQoR0NYKS5hDQpETEwJPSBwdGhyZWFkJChHQ1gpLmRs bA0KDQojIElmIGEgdGVzdCBjYXNlIHJldHVybnMgYSBub24temVybyBleGl0 IGNvZGUgdG8gdGhlIHNoZWxsLCBtYWtlIHdpbGwNCiMgc3RvcC4NCg0KVEVT VAk9IGNvbmR2YXIxMC5leGUNCg0KR0M6DQoJJChNQUtFKSBHQ1g9R0MgWFhD RkxBR1M9Ii14IGMgLURfX0NMRUFOVVBfQyIgJChURVNUKQ0KDQpHQ0U6DQoJ JChNQUtFKSBHQ1g9R0NFIFhYQ0ZMQUdTPSItbXRocmVhZHMgLXggYysrIC1E X19DTEVBTlVQX0NYWCIgJChURVNUKQ0KDQpHQ1g6DQoJJChNQUtFKSBHQ1g9 R0MgWFhDRkxBR1M9Ii1tdGhyZWFkcyAteCBjKysgLURfX0NMRUFOVVBfQyIg JChURVNUKQ0KDQolLmV4ZTogJS5jDQoJQCAkKEVDSE8pIENvbXBpbGluZyAk QA0KCUAgJChFQ0hPKSAkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChJTkNM VURFUykgJChMSUJESVJTKSAtbHB0aHJlYWQkKEdDWCkNCglAICQoQ0MpICQo Q0ZMQUdTKSAtbyAkQCAkXiAkKElOQ0xVREVTKSAkKExJQkRJUlMpIC1scHRo cmVhZCQoR0NYKQ0KDQolLnByZTogJS5jDQoJQCAkKENDKSAtRSAkKENGTEFH UykgLW8gJEAgJF4gJChJTkNMVURFUykNCg0KJS5zOiAlLmMNCglAICQoQ0Mp IC1TICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKElOQ0xVREVTKQ0KDQpjbGVhbjoN CgktICQoUk0pICouYQ0KCS0gJChSTSkgKi5lDQoJLSAkKFJNKSAqLmkNCgkt ICQoUk0pICoub2JqDQoJLSAkKFJNKSAqLnBkYg0KCS0gJChSTSkgKi5leGUN CgktICQoUk0pICoubG9nDQo= --------------040506050703080101040707--