From owner-freebsd-threads@FreeBSD.ORG Sat May 4 11:29:45 2013 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 354C63C8 for ; Sat, 4 May 2013 11:29:45 +0000 (UTC) (envelope-from radiomlodychbandytow@o2.pl) Received: from moh3-ve1.go2.pl (moh3-ve1.go2.pl [193.17.41.30]) by mx1.freebsd.org (Postfix) with ESMTP id EE4911242 for ; Sat, 4 May 2013 11:29:44 +0000 (UTC) Received: from moh3-ve1.go2.pl (unknown [10.0.0.117]) by moh3-ve1.go2.pl (Postfix) with ESMTP id BBA47A6A026 for ; Sat, 4 May 2013 13:29:43 +0200 (CEST) Received: from unknown (unknown [10.0.0.108]) by moh3-ve1.go2.pl (Postfix) with SMTP for ; Sat, 4 May 2013 13:29:43 +0200 (CEST) Received: from unknown [93.175.66.185] by poczta.o2.pl with ESMTP id nptnfK; Sat, 04 May 2013 13:29:43 +0200 Message-ID: <5184F113.805@o2.pl> Date: Sat, 04 May 2013 13:29:23 +0200 From: =?UTF-8?B?UmFkaW8gbcWCb2R5Y2ggYmFuZHl0w7N3?= User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:17.0) Gecko/20130407 Thunderbird/17.0.5 MIME-Version: 1.0 To: freebsd-threads@freebsd.org Subject: Getting ENOMEM with pthread_mutex_init Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-O2-Trust: 1, 37 X-O2-SPF: neutral X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 May 2013 11:29:45 -0000 Hello, I'm having troubles that I seem unable to resolve. My programs creates and destroys mutexes repeatably (and, obviously, uses them in between). Around the 60th lock created, I always get ENOMEM. I have free memory, lots of it. All locks get released properly. The relevant pieces of code: #define MUTEX pthread_mutex_t inline MUTEX create_mutex() { MUTEX mutex; int ret = pthread_mutex_init(&mutex, NULL); if(ret != 0) throw std::runtime_error("Failed to create a mutex"); return mutex; } inline void destroy_mutex(MUTEX *mutex) { int ret = pthread_mutex_destroy(mutex); if(ret != 0) throw std::runtime_error("Failed to destroy a mutex"); } Scheduler::Scheduler(char* in, char* out, BlockInfo* metadata, size_t isize, size_t block_size, size_t iters, size_t min_work_size) : in(in), current_in(in), out(out), current_out(out), metadata(metadata), current_metadata(metadata), size(isize), size_left(isize), block_size(block_size), iters_left(iters) { lock = create_mutex(); work_size = (min_work_size / block_size) * block_size; if (work_size < min_work_size) work_size += block_size; } Scheduler::~Scheduler() { destroy_mutex(&lock); } Any suggestions? -- Twoje radio