//
// aegis - project change supervisor
// Copyright (C) 2006-2008 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// .
//
#include
#include
void
project_ty::lock_prepare_everything()
{
//
// Lock everything that's easy to lock.
//
project_baseline_read_lock_prepare(this);
project_history_lock_prepare(this);
pstate_lock_prepare();
//
// Also lock all active changes, and recurse into all active branches.
//
for (long j = 0; ; ++j)
{
long cn = 0;
if (!change_branch_change_nth(pcp, j, &cn))
break;
change::pointer cp = change_alloc(this, cn);
change_bind_existing(cp);
if (change_is_a_branch(cp))
{
project_ty *pp2 = bind_branch(cp);
pp2->lock_prepare_everything();
// Do not free this project (change), or it will segfault
// later. This, of couse, a memory leak. Once the project
// smart pointers are being used universally, this will no
// longer be a problem.
}
else if (!cp->is_completed())
{
change_cstate_lock_prepare(cp);
// Do not free this change, or it will segfault later.
// This, of couse, a memory leak. One the change smart
// pointers are being used universally, this will no longer
// be a problem.
}
else
{
change_free(cp);
}
}
}