}
-struct CcUnpinData_leave_func_foreach_get_first_args {
+static void CcUnpinData_leave_func_finalize(struct private_bcb *privbcb)
+{
+gboolean errbool;
+
+ g_assert(privbcb->dirty==FALSE);
+ g_assert(privbcb->lsn_valid==FALSE);
+ g_assert(NULL==g_tree_lookup(private_bcb_lsn_tree,privbcb));
+ g_assert(privbcb->leave_func_pending==TRUE);
+ g_assert(privbcb->ref_count==1);
+ privbcb_set(privbcb,PRIVBCB_ITEM_LEAVE_FUNC_PENDING,FALSE);
+ privbcb_set(privbcb,PRIVBCB_ITEM_REF_COUNT_DESTRUCTOR,-1);
+ errbool=g_hash_table_remove(private_bcb_hash,privbcb->PublicBcb);
+ g_assert(errbool==TRUE);
+}
+
+struct CcUnpinData_leave_func_param {
struct private_bcb *privbcb_req;
struct private_bcb *found; /* return */
};
static gboolean CcUnpinData_leave_func_foreach_get_first(struct private_bcb *key,struct private_bcb *value,
- struct CcUnpinData_leave_func_foreach_get_first_args *args /* data */)
+ struct CcUnpinData_leave_func_param *CcUnpinData_leave_func_param /* data */)
{
g_return_val_if_fail(key!=NULL,TRUE); /* meaning: stop the traversal */
g_return_val_if_fail(value!=NULL,TRUE); /* meaning: stop the traversal */
g_return_val_if_fail(key==value,TRUE); /* meaning: stop the traversal */
g_return_val_if_fail(validate_Bcb(key->PublicBcb),TRUE); /* meaning: stop the traversal */
- g_return_val_if_fail(args!=NULL,TRUE); /* meaning: stop the traversal */
- g_return_val_if_fail(args->found==NULL,TRUE); /* meaning: stop the traversal */
+ g_return_val_if_fail(CcUnpinData_leave_func_param!=NULL,TRUE); /* meaning: stop the traversal */
+ g_return_val_if_fail(CcUnpinData_leave_func_param->found==NULL,TRUE); /* meaning: stop the traversal */
g_assert(key->lsn_valid==TRUE);
- if (key==args->privbcb_req) {
- args->found=key;
+ if (key==CcUnpinData_leave_func_param->privbcb_req) {
+ CcUnpinData_leave_func_param->found=key;
return TRUE; /* stop the traversal */
}
if (!key->dirty)
return FALSE; /* continue the traversal */
- args->found=key; /* first dirty LSNed buffer */
+ CcUnpinData_leave_func_param->found=key; /* first dirty LSNed buffer */
return TRUE; /* stop the traversal */
}
-static void CcUnpinData_leave_func_finalize(struct private_bcb *privbcb)
-{
-gboolean errbool;
-
- g_assert(privbcb->dirty==FALSE);
- g_assert(privbcb->lsn_valid==FALSE);
- g_assert(NULL==g_tree_lookup(private_bcb_lsn_tree,privbcb));
- g_assert(privbcb->leave_func_pending==TRUE);
- g_assert(privbcb->ref_count==1);
- privbcb_set(privbcb,PRIVBCB_ITEM_LEAVE_FUNC_PENDING,FALSE);
- privbcb_set(privbcb,PRIVBCB_ITEM_REF_COUNT_DESTRUCTOR,-1);
- errbool=g_hash_table_remove(private_bcb_hash,privbcb->PublicBcb);
- g_assert(errbool==TRUE);
-}
-
static void CcUnpinData_leave_func(struct private_bcb *privbcb_req) /* NULL to traverse the whole tree */
{
struct private_bcb *privbcb;
-struct CcUnpinData_leave_func_foreach_get_first_args args;
+struct CcUnpinData_leave_func_param CcUnpinData_leave_func_param;
g_log(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,"%s: privbcb_req=%p,privbcb_req->ref_count=%d,privbcb_req->leave_func_pending=%d"
",privbcb_req->lsn_valid=%d",G_STRLOC,
private_bcb_lsn_tree_init();
for (;;) {
- args.privbcb_req=privbcb_req;
- args.found=NULL;
+ CcUnpinData_leave_func_param.privbcb_req=privbcb_req;
+ CcUnpinData_leave_func_param.found=NULL;
g_tree_foreach(private_bcb_lsn_tree,
(GTraverseFunc)CcUnpinData_leave_func_foreach_get_first, /* func */
- &args); /* user_data */
- if (args.found==NULL) {
+ &CcUnpinData_leave_func_param); /* user_data */
+ if (CcUnpinData_leave_func_param.found==NULL) {
g_assert(privbcb_req==NULL); /* Global LSN-ordered flush has no more entries. */
break;
}
- privbcb=args.found;
+ privbcb=CcUnpinData_leave_func_param.found;
g_log(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,
"%s: privbcb->FileObject=%p,privbcb->MappedFileOffset=0x%llX,privbcb->MappedLength=0x%lX,privbcb->ref_count=%d"