Skip to content

Infinite wait of MergeManager thread is possible if all(what ever left) MOF fetch requests come at a time. #1

@GoogleCodeExporter

Description

@GoogleCodeExporter
What steps will reproduce the problem?
1. Lets suppose all maps have completed and RDMA client received fetch requests 
for all MOFs from JAVA at a time. Then we will add fetch requests to fetch list 
and notify other threads on merge_man->cond.
{code}
g_task->merge_man->fetch_list.push_back(req);
pthread_cond_broadcast(&g_task->merge_man->cond);
pthread_mutex_unlock(&g_task->merge_man->lock);
{code}
2. By the time merge manager checked fetch list and fetch mops also.
{code}
while (manager->fetch_list.size() > 0) {
--
and 
--
 while (! manager->fetched_mops.empty() ) {
{code}

3. after broadcasting for all fetch requests merge manager may go to wait 
{code}
log(lsTRACE, "before pthread_cond_wait");
pthread_cond_wait(&manager->cond, &manager->lock);
pthread_mutex_unlock(&manager->lock);
{code}
Later no one are notifying on &manager->cond so MergeManager thread may wait 
infinitely.

What is the expected output? What do you see instead?
If no one are notifying within some interval merge manager should 
wakeup(timeout) and check for any new fetch requests or fetched mops to be 
processed.

I will provide patch If possible.


What version of the product are you using? On what operating system?
UDA 3.0


Please provide any additional information below.


Original issue reported on code.google.com by chrajesh...@gmail.com on 6 Mar 2013 at 6:57

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions