|
|
g_list_free(children); | g_list_free(children); |
} | } |
| |
|
static void |
|
unregister_node (GamNode * node) |
|
{ |
|
if (missing_resources != NULL) { |
|
gam_poll_remove_missing(node); |
|
} |
|
if (busy_resources != NULL) { |
|
gam_poll_remove_busy(node); |
|
} |
|
if (all_resources != NULL) { |
|
all_resources = g_list_remove(all_resources, node); |
|
} |
|
} |
|
|
|
|
static gboolean | static gboolean |
remove_directory_subscription(GamNode * node, GamSubscription * sub) | remove_directory_subscription(GamNode * node, GamSubscription * sub) |
{ | { |
|
|
| |
if ((!gam_node_get_subscriptions(child)) && (remove_dir) && | if ((!gam_node_get_subscriptions(child)) && (remove_dir) && |
(!gam_tree_has_children(tree, child))) { | (!gam_tree_has_children(tree, child))) { |
if (missing_resources != NULL) { |
unregister_node (child); |
gam_poll_remove_missing(child); |
|
} |
|
if (busy_resources != NULL) { |
|
gam_poll_remove_busy(child); |
|
} |
|
gam_tree_remove(tree, child); | gam_tree_remove(tree, child); |
} else { | } else { |
remove_dir = FALSE; | remove_dir = FALSE; |
|
|
"prune_tree: node %s\n", gam_node_get_path(node)); | "prune_tree: node %s\n", gam_node_get_path(node)); |
| |
parent = gam_node_parent(node); | parent = gam_node_parent(node); |
if (missing_resources != NULL) { |
unregister_node(node); |
gam_poll_remove_missing(node); |
|
} |
|
if (busy_resources != NULL) { |
|
gam_poll_remove_busy(node); |
|
} |
|
if (all_resources != NULL) { |
|
all_resources = g_list_remove(all_resources, node); |
|
} |
|
gam_tree_remove(tree, node); | gam_tree_remove(tree, node); |
prune_tree(parent); | prune_tree(parent); |
} | } |
|
|
if (!gam_node_get_subscriptions(node)) { | if (!gam_node_get_subscriptions(node)) { |
GamNode *parent; | GamNode *parent; |
| |
if (missing_resources != NULL) { |
unregister_node (node); |
gam_poll_remove_missing(node); |
|
} |
|
if (busy_resources != NULL) { |
|
gam_poll_remove_busy(node); |
|
} |
|
if (all_resources != NULL) { |
|
all_resources = g_list_remove(all_resources, node); |
|
} |
|
if (gam_tree_has_children(tree, node)) { | if (gam_tree_has_children(tree, node)) { |
fprintf(stderr, | fprintf(stderr, |
"node %s is not dir but has children\n", | "node %s is not dir but has children\n", |
|
|
if (remove_directory_subscription(node, sub)) { | if (remove_directory_subscription(node, sub)) { |
GamNode *parent; | GamNode *parent; |
| |
if (missing_resources != NULL) { |
unregister_node (node); |
gam_poll_remove_missing(node); |
|
} |
|
if (busy_resources != NULL) { |
|
gam_poll_remove_busy(node); |
|
} |
|
if (all_resources != NULL) { |
|
all_resources = g_list_remove(all_resources, node); |
|
} |
|
parent = gam_node_parent(node); | parent = gam_node_parent(node); |
if (!gam_tree_has_children(tree, node)) { | if (!gam_tree_has_children(tree, node)) { |
gam_tree_remove(tree, node); | gam_tree_remove(tree, node); |
|
|
return (0); | return (0); |
} | } |
| |
switch (req->type) { |
switch (req->state) { |
case REQ_NONE: | case REQ_NONE: |
case REQ_SUSPENDED: | case REQ_SUSPENDED: |
GAM_DEBUG(DEBUG_INFO, | GAM_DEBUG(DEBUG_INFO, |
|
|
req->type); | req->type); |
return (0); | return (0); |
case REQ_INIT: | case REQ_INIT: |
req->type = REQ_CONFIRMED; |
req->state = REQ_CONFIRMED; |
case REQ_CONFIRMED: | case REQ_CONFIRMED: |
break; | break; |
} | } |