Getting ENOMEM with pthread_mutex_init
Radio młodych bandytów
radiomlodychbandytow at o2.pl
Sat May 4 11:29:45 UTC 2013
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
More information about the freebsd-threads
mailing list