Commit b2bdcc12 authored by hrchilds's avatar hrchilds

Update from January 5, 2004

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@153 18c085ea-50e0-402c-830e-de6fd14e8384
parent 126c6144
......@@ -745,14 +745,6 @@ RPCExecutor<ExecuteRPC>::Execute(ExecuteRPC *rpc)
// Purpose:
// Execute a ClearCacheRPC.
//
// Notes: At present, this RPC executor forces the network manager to
// clear all networks. This is not a good thing to do because
// it potentially wastes a lot of work. Someone more knowledgeable
// about the engine should make it clear the networks that use
// the specified database and make the engine re-open the
// database since it could have changed on disk if we're
// doing this RPC.
//
// Programmer: Brad Whitlock
// Creation: Tue Jul 30 13:10:26 PST 2002
//
......@@ -760,6 +752,10 @@ RPCExecutor<ExecuteRPC>::Execute(ExecuteRPC *rpc)
// Jeremy Meredith, Thu Jul 10 11:37:48 PDT 2003
// Made the engine an object.
//
// Hank Childs, Mon Jan 5 15:54:26 PST 2004
// When a database is involved, only clear the networks that reference
// that database.
//
// ****************************************************************************
template<>
void
......@@ -776,9 +772,7 @@ RPCExecutor<ClearCacheRPC>::Execute(ClearCacheRPC *rpc)
netmgr->ClearAllNetworks();
else
{
// Fix me. Make it only clear info related to the specified db and
// also make it reopen the database.
netmgr->ClearAllNetworks();
netmgr->ClearNetworksWithDatabase(rpc->GetDatabaseName());
}
rpc->SendReply();
......
......@@ -66,6 +66,9 @@ static double RenderBalance(int numTrianglesIHave);
// Kathleen Bonnell, Tue Nov 20 12:35:54 PST 2001
// Initialize requireOriginalCells.
//
// Hank Childs, Mon Jan 5 16:04:57 PST 2004
// Initialize uniqueNetworkId.
//
// ****************************************************************************
NetworkManager::NetworkManager(void) : virtualDatabases()
{
......@@ -73,6 +76,7 @@ NetworkManager::NetworkManager(void) : virtualDatabases()
workingNet = NULL;
loadBalancer = NULL;
requireOriginalCells = false;
uniqueNetworkId = 0;
// stuff to support scalable rendering
{
......@@ -97,16 +101,20 @@ NetworkManager::NetworkManager(void) : virtualDatabases()
// Creation: September 29, 2000
//
// Modifications:
// Sean Ahern, Fri May 24 11:12:25 PDT 2002
// Got rid of deletion of the database cache, since all DBs in there
// will be deleted by deleting the network cache.
// Sean Ahern, Fri May 24 11:12:25 PDT 2002
// Got rid of deletion of the database cache, since all DBs in there
// will be deleted by deleting the network cache.
//
// Hank Childs, Mon Jan 5 16:30:04 PST 2004
// Don't assume the caches are valid.
//
// ****************************************************************************
NetworkManager::~NetworkManager(void)
{
//cerr << "NetworkManager::~NetworkManager(void)" << endl;
for (int i = 0; i < networkCache.size(); i++)
delete networkCache[i];
if (networkCache[i] != NULL)
delete networkCache[i];
}
// ****************************************************************************
......@@ -119,11 +127,15 @@ NetworkManager::~NetworkManager(void)
// Creation: January 7, 2001
//
// Modifications:
// Sean Ahern, Tue May 14 14:35:42 PDT 2002
// Retrofitted for my new network management techniques.
// Sean Ahern, Tue May 14 14:35:42 PDT 2002
// Retrofitted for my new network management techniques.
//
// Sean Ahern, Tue May 21 16:09:56 PDT 2002
// Told the underlying objects to free their data.
//
// Sean Ahern, Tue May 21 16:09:56 PDT 2002
// Told the underlying objects to free their data.
// Hank Childs, Mon Jan 5 16:30:04 PST 2004
// Don't clear out the vectors, so this can be consistent with how the
// ClearNetworksWithDatabase works.
//
// ****************************************************************************
void
......@@ -133,14 +145,76 @@ NetworkManager::ClearAllNetworks(void)
int i;
for (i = 0; i < databaseCache.size(); i++)
delete databaseCache[i];
databaseCache.clear();
{
if (databaseCache[i] != NULL)
delete databaseCache[i];
databaseCache[i] = NULL;
}
for (i = 0; i < networkCache.size(); i++)
{
if (networkCache[i] != NULL)
delete networkCache[i];
networkCache[i] = NULL;
}
for (i = 0 ; i < globalCellCounts.size() ; i++)
{
globalCellCounts[i] = 0;
}
}
// ****************************************************************************
// Method: NetworkManager::ClearNetworksWithDatabase
//
// Purpose:
// Clears out the caches that reference a specific database.
//
// Arguments:
// db The name of a database.
//
// Programmer: Hank Childs
// Creation: January 5, 2004
//
// ****************************************************************************
void
NetworkManager::ClearNetworksWithDatabase(const std::string &db)
{
//cerr << "NetworkManager::ClearNetworksWithDatabase()" << endl;
int i;
//
// Clear out the networks before the databases. This is because if we
// delete the databases first, the networks will have dangling pointers.
//
for (i = 0; i < networkCache.size(); i++)
delete networkCache[i];
networkCache.clear();
globalCellCounts.clear();
{
if (networkCache[i] != NULL)
{
NetnodeDB *ndb = networkCache[i]->GetNetDB();
if (ndb != NULL)
{
if (ndb->GetFilename() == db)
{
delete networkCache[i];
networkCache[i] = NULL;
globalCellCounts[i] = 0;
}
}
}
}
for (i = 0; i < databaseCache.size(); i++)
{
if (databaseCache[i] != NULL)
{
if (databaseCache[i]->GetFilename() == db)
{
delete databaseCache[i];
databaseCache[i] = NULL;
}
}
}
}
// ****************************************************************************
......@@ -170,6 +244,9 @@ NetworkManager::ClearAllNetworks(void)
// Hank Childs, Tue Nov 4 14:19:05 PST 2003
// Checked in work-around (HACK) to avoid apparent compiler bug on AIX.
//
// Hank Childs, Mon Jan 5 16:49:28 PST 2004
// Do not assume that all of the cached databases are non-NULL.
//
// ****************************************************************************
NetnodeDB *
......@@ -180,7 +257,8 @@ NetworkManager::GetDBFromCache(const string &filename, int time)
// If we don't have a load balancer, we're dead.
if (loadBalancer == NULL)
{
debug1 << "Internal error: A load balancer was never registered." << endl;
debug1 << "Internal error: A load balancer was never registered."
<< endl;
EXCEPTION0(ImproperUseException);
}
......@@ -188,6 +266,8 @@ NetworkManager::GetDBFromCache(const string &filename, int time)
NetnodeDB* cachedDB = NULL;
for (int i = 0; i < databaseCache.size(); i++)
{
if (databaseCache[i] == NULL)
continue;
if (databaseCache[i]->GetFilename() == filename)
{
cachedDB = databaseCache[i];
......@@ -454,6 +534,9 @@ NetworkManager::StartNetwork(const string &filename, const string &var,
// This ensures that we pick up the metadata and SIL for the time state
// that we're intersted in.
//
// Hank Childs, Mon Jan 5 16:49:28 PST 2004
// Account for databases in the cached lists that have been cleared.
//
// ****************************************************************************
void
NetworkManager::DefineDB(const string &dbName, const string &dbPath,
......@@ -499,7 +582,11 @@ NetworkManager::DefineDB(const string &dbName, const string &dbPath,
// cache.
bool found = false;
for(i = 0; i < databaseCache.size() && !found; ++i)
{
if (databaseCache[i] == NULL)
continue;
found = (databaseCache[i]->GetFilename() == dbName);
}
// If the database was in the database cache, we can return.
if(found)
......@@ -520,6 +607,8 @@ NetworkManager::DefineDB(const string &dbName, const string &dbPath,
std::vector<NetnodeDB*> databaseBadMatches;
for (i = 0; i < databaseCache.size(); i++)
{
if (databaseCache[i] == NULL)
continue;
if (databaseCache[i]->GetFilename() != dbName)
databaseBadMatches.push_back(databaseCache[i]);
}
......@@ -724,6 +813,11 @@ NetworkManager::MakePlot(const string &id, const AttributeGroup *atts)
// Programmer: Jeremy Meredith
// Creation: November 9, 2001
//
// Modifications:
//
// Hank Childs, Mon Jan 5 16:04:57 PST 2004
// Make sure that the network id is always unique for each network.
//
// ****************************************************************************
int
NetworkManager::EndNetwork(void)
......@@ -749,7 +843,7 @@ NetworkManager::EndNetwork(void)
workingNet->SetTerminalNode(workingNetnodeList[0]);
// Push the working net onto the network caches.
workingNet->SetID(networkCache.size());
workingNet->SetID(uniqueNetworkId++);
networkCache.push_back(workingNet);
globalCellCounts.push_back(-1);
......@@ -791,6 +885,9 @@ NetworkManager::CancelNetwork(void)
// Hank Childs, Wed Nov 21 11:41:59 PST 2001
// Tell the load balancer to reset the pipeline if we re-use the network.
//
// Hank Childs, Mon Jan 5 16:39:06 PST 2004
// Make sure that the id requested hasn't already been cleared.
//
// ****************************************************************************
void
NetworkManager::UseNetwork(int id)
......@@ -798,7 +895,8 @@ NetworkManager::UseNetwork(int id)
//cerr << "NetworkManager::UseNetwork()" << endl;
if (workingNet)
{
debug1 << "Internal error: UseNetwork called with an open network" << endl;
debug1 << "Internal error: UseNetwork called with an open network"
<< endl;
EXCEPTION0(ImproperUseException);
}
......@@ -811,6 +909,13 @@ NetworkManager::UseNetwork(int id)
}
// re-access the given network
if (networkCache[id] == NULL)
{
debug1 << "Asked to use a network that was cleared out previously."
<< " (presumably because a database was re-opened)." << endl;
EXCEPTION0(ImproperUseException);
}
workingNet = networkCache[id];
int pipelineIndex = workingNet->GetPipelineSpec()->GetPipelineIndex();
loadBalancer->ResetPipeline(pipelineIndex);
......@@ -898,6 +1003,11 @@ NetworkManager::GetTotalGlobalCellCounts(void) const
// Programmer: Hank Childs
// Creation: September 9, 2002
//
// Modifications:
//
// Hank Childs, Mon Jan 5 16:39:06 PST 2004
// Make sure that this isn't called on a previously cleared network.
//
// ****************************************************************************
void
NetworkManager::DoneWithNetwork(int id)
......@@ -911,9 +1021,16 @@ NetworkManager::DoneWithNetwork(int id)
EXCEPTION0(ImproperUseException);
}
networkCache[id]->ReleaseData();
globalCellCounts[id] = -1;
if (networkCache[id] != NULL)
{
networkCache[id]->ReleaseData();
globalCellCounts[id] = -1;
}
else
{
debug1 << "Warning: DoneWithNetwork called on previously cleared "
<< "network." << endl;
}
}
// ****************************************************************************
......@@ -929,6 +1046,11 @@ NetworkManager::DoneWithNetwork(int id)
// Programmer: Hank Childs
// Creation: November 30, 2001
//
// Modifications:
//
// Hank Childs, Mon Jan 5 16:39:06 PST 2004
// Make sure the network hasn't already been cleared.
//
// ****************************************************************************
void
NetworkManager::UpdatePlotAtts(int id, const AttributeGroup *atts)
......@@ -942,6 +1064,12 @@ NetworkManager::UpdatePlotAtts(int id, const AttributeGroup *atts)
EXCEPTION0(ImproperUseException);
}
if (networkCache[id] == NULL)
{
debug1 << "Asked to update the plot attributes of a network that has "
<< "already been cleared." << endl;
EXCEPTION0(ImproperUseException);
}
if (networkCache[id]->GetID() != id)
{
debug1 << "Internal error: network at position[" << id
......@@ -1461,6 +1589,9 @@ NetworkManager::StopPickMode(void)
// Kathleen Bonnell, Tue Dec 2 17:36:44 PST 2003
// Use a special query if the pick type is Curve.
//
// Hank Childs, Mon Jan 5 16:39:06 PST 2004
// Make sure the network hasn't already been cleared.
//
// ****************************************************************************
void
NetworkManager::Pick(const int id, PickAttributes *pa)
......@@ -1472,6 +1603,13 @@ NetworkManager::Pick(const int id, PickAttributes *pa)
EXCEPTION0(ImproperUseException);
}
if (networkCache[id] == NULL)
{
debug1 << "Asked to pick on a network that has already been cleared."
<< endl;
EXCEPTION0(ImproperUseException);
}
if (id != networkCache[id]->GetID())
{
debug1 << "Internal error: network at position[" << id << "] "
......@@ -1574,6 +1712,9 @@ NetworkManager::Pick(const int id, PickAttributes *pa)
// Kathleen Bonnell, Wed Oct 29 16:06:23 PST 2003
// Add PlotMinMax query.
//
// Hank Childs, Mon Jan 5 16:39:06 PST 2004
// Make sure the network hasn't already been cleared.
//
// ****************************************************************************
void
NetworkManager::Query(const std::vector<int> &ids, QueryAttributes *qa)
......@@ -1590,6 +1731,13 @@ NetworkManager::Query(const std::vector<int> &ids, QueryAttributes *qa)
EXCEPTION0(ImproperUseException);
}
if (networkCache[id] == NULL)
{
debug1 << "Asked to query a network that has already been cleared."
<< endl;
EXCEPTION0(ImproperUseException);
}
if (id != networkCache[id]->GetID())
{
debug1 << "Internal error: network at position[" << id << "] "
......
......@@ -116,6 +116,11 @@ class VisWindow;
// Jeremy Meredith, Thu Nov 6 13:12:15 PST 2003
// Added a method to cancel the current network.
//
// Hank Childs, Mon Jan 5 15:54:26 PST 2004
// Add unique network ids for all networks. Also add method
// ClearNetworksWithDatabase. Also remove networkMRU since it is unused.
// Populating networkMRU could also lead to problems with dangling pointers.
//
// ****************************************************************************
class NetworkManager
{
......@@ -123,7 +128,9 @@ class NetworkManager
public:
NetworkManager(void);
~NetworkManager(void);
void ClearAllNetworks(void);
void ClearNetworksWithDatabase(const std::string &);
NetnodeDB* GetDBFromCache(const string &filename, int time);
void StartNetwork(const std::string&, const std::string &,
......@@ -173,6 +180,7 @@ class NetworkManager
DataNetwork *workingNet;
std::vector<std::string> nameStack;
int uniqueNetworkId;
bool requireOriginalCells;
LoadBalancer *loadBalancer;
WindowAttributes windowAttributes;
......
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>VisIt 1.2.6 Release Notes</title>
</head>
<body>
<center><b><font size="6">VisIt 1.2.6 Release Notes</font></b></center>
<p>Welcome to VisIt's release notes page. This page describes the important
enhancements and bug-fixes that were added to this release.</p>
<p><b><font size="4">Features added in version 1.2.6</font></b></p>
<ul>
<li>Gradient and resampling operations have been drastically sped up for rectilinear grids. Both operations are over 100x faster.</li>
<li>Pick can now distinguish between block-logical and domain-logical indices. The Pick window also has new controls to allow the user to select what is displayed.</li>
<li>Expressions with multiple variables now support different centerings.</li>
<li>The Minmax query now outputs the correct set names for the given SIL.</li>
<li>Axis label scaling can now be set manually.</li>
<li>The view window now understands xtrans, ytans, and zf commands.</li>
<li>VisIt now provides a "recenter" expression that allows you to change the centering for a variable.</li>
<li>VisIt now shows a hidden vis window when that vis window is made active.</li>
<li>The Mili database reader plugin is now available on GPS at LLNL.</li>
<li>The BoxLib database reader plugin is now available on AIX systems at LLNL.</li>
<li>The mesh quality expressions, which are added to the scalar plots' variable menus, are now better organized.</li>
<li>VisIt can now show the anchor points along a lineout.</li>
</ul>
<p><b><font size="4">Bugs fixed in version 1.2.6</font></b></p>
<ul>
<li>VisIt adds new plots to old windows.</li>
<li>The compute engine crashes with identity expressions.</li>
<li>Using the Vector plot with the Threshold operator crashes the compute engine.</li>
<li>VisIt's software volume renderer hangs VisIt.</li>
<li>Lineout gives bad results with plots that have AMR databases.</li>
<li>Using the Vector plot with the Isosurface operator crashes the compute engine.</li>
<li>Doing pan and zoom is not intuitive.</li>
<li>The Minmax query sometimes causes VisIt to hang when running the compute engine in parallel.</li>
<li>You can hang VisIt if you issue commands too quickly.</li>
<li>Mesh lines can bleed through thin regions.</li>
<li>Actual extents do not play well with command line view setting.</li>
<li>Time slider requests are queued if you start paging the time slider.</li>
<li>Lineout does more work than is necessary.</li>
<li>Session files can produce visualizations with the wrong settings when VisIt finds a system config file.</li>
<li>Restoring sessions repeatedly causes view problems and an eventual viewer crash.</li>
<li>The File panel does not show new time states for a .visit file after reopening the file.</li>
<li>You can't run VisIt in distributed mode to a remote machine that is protected by a firewall.</li>
<li>The Onionpeel operator does not correctly recognize block-global coordinates.</li>
<li>?The File panel does not show all time states for virtual databases that have more than one file per time state.</li>
<li>avtPointToGlyphFilter does not work with cell data.</li>
<li>If you specify an output directory for saved images, stereo images are not saved there.</li>
<li>Sometimes there are extra tick marks on the 3d axis.</li>
<li>Sometimes pieces of the 3d axies are corrupted.</li>
<li>VisIt renders the current plots while restoring a session file.</li>
<li>Navigation mode was not saved in a session file.</li>
<li>Changing the "smooth data" toggle in the Volume plot attributes window should cause the plot to re-execute.</li>
<li>VisIt's CLI uses the whole CPU while waiting for a calculation to complete.</li>
<li>View keyframes are not copied to a new window when using window cloning.</li>
<li>The -dump flag is not used when relaunching engines that originally used the -dump flag.</li>
</ul>
<p>Click the following link to view the release notes for the previous version
of VisIt: <a href="relnotes1.2.5.html">VisIt 1.2.5 Release Notes</a>.</p>
</body>
</html>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment