Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 81103 invoked from network); 19 Aug 2010 19:51:38 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 19 Aug 2010 19:51:38 -0000 Received: (qmail 87088 invoked by uid 500); 19 Aug 2010 19:51:38 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 87051 invoked by uid 500); 19 Aug 2010 19:51:37 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 87044 invoked by uid 99); 19 Aug 2010 19:51:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Aug 2010 19:51:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Aug 2010 19:51:37 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 12B0E23889D5; Thu, 19 Aug 2010 19:50:20 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r987283 - /harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c Date: Thu, 19 Aug 2010 19:50:20 -0000 To: commits@harmony.apache.org From: iberezhn@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100819195020.12B0E23889D5@eris.apache.org> Author: iberezhn Date: Thu Aug 19 19:50:19 2010 New Revision: 987283 URL: http://svn.apache.org/viewvc?rev=987283&view=rev Log: Fixed thread start failures when libthr reuses threads on FreeBSD Modified: harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c Modified: harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c?rev=987283&r1=987282&r2=987283&view=diff ============================================================================== --- harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c (original) +++ harmony/enhanced/java/trunk/drlvm/vm/port/src/thread/linux/thread_os.c Thu Aug 19 19:50:19 2010 @@ -226,7 +226,10 @@ int set_alt_stack(port_tls_data_t* tlsda //#else // sigalt.ss_flags = set ? SS_ONSTACK : SS_DISABLE; //#endif - return sigaltstack(&sigalt, NULL); + if (sigaltstack(&sigalt, NULL) != 0) + return errno; + + return 0; } static int set_guard_page(port_tls_data_t* tlsdata, Boolean set) @@ -257,7 +260,7 @@ static int set_guard_page(port_tls_data_ res = set_alt_stack(tlsdata, TRUE); if (res != 0) - return errno; + return res; } tlsdata->guard_page_set = set; @@ -317,17 +320,17 @@ static int setup_stack(port_tls_data_t* int res; void* ptr; stack_t sigalt; - size_t current_page_addr, mapping_addr, mapping_size; + size_t /*current_page_addr,*/ mapping_addr, mapping_size; if (!port_shared_data) return -1; - current_page_addr = ((size_t)&res) & ~(PSD->guard_page_size - 1); +// current_page_addr = ((size_t)&res) & ~(PSD->guard_page_size - 1); // leave place for mmap work - mapping_addr = current_page_addr - PSD->guard_page_size; +// mapping_addr = current_page_addr - PSD->guard_page_size; // found size of the stack area which should be maped - mapping_size = tlsdata->stack_size - - ((size_t)tlsdata->stack_addr - mapping_addr); +// mapping_size = tlsdata->stack_size +// - ((size_t)tlsdata->stack_addr - mapping_addr); if ((size_t)(&res) - PSD->mem_protect_size < (size_t)tlsdata->guard_page_addr + tlsdata->guard_page_size) @@ -347,7 +350,7 @@ static int setup_stack(port_tls_data_t* res = set_guard_page(tlsdata, TRUE); if (res != 0) - return errno; + return res; return 0; } @@ -493,6 +496,12 @@ int port_thread_detach() if (res != 0) return res; + size_t mapping_addr = (size_t)tlsdata->stack_addr - tlsdata->stack_size; + size_t mapping_size = + (tlsdata->guard_stack_size + tlsdata->mem_protect_size + 2*PSD->guard_page_size - 1) & + ~(PSD->guard_page_size - 1); + munmap((void*)mapping_addr, mapping_size); + if (tlsdata->foreign) STD_FREE(tlsdata);