mirror of
https://github.com/OpenNebula/one.git
synced 2025-02-26 09:57:23 +03:00
Feature #3471: Fix segmentation fault
There was a set::erase inside an iterator loop
This commit is contained in:
parent
7ed6071ffd
commit
c4577d085a
@ -187,6 +187,9 @@ private:
|
||||
set<pair<int,int> > datastores;
|
||||
set<pair<int,int> > vnets;
|
||||
|
||||
void add_group_rules(int group);
|
||||
void del_group_rules(int group);
|
||||
|
||||
void add_cluster_rules(int group, int zone_id, int cluster_id);
|
||||
void del_cluster_rules(int group, int zone_id, int cluster_id);
|
||||
|
||||
|
103
src/vdc/Vdc.cc
103
src/vdc/Vdc.cc
@ -185,7 +185,6 @@ int Vdc::drop(SqlDB * db)
|
||||
{
|
||||
set<int>::const_iterator it;
|
||||
int rc;
|
||||
string error_msg;
|
||||
|
||||
rc = PoolObjectSQL::drop(db);
|
||||
|
||||
@ -193,7 +192,7 @@ int Vdc::drop(SqlDB * db)
|
||||
{
|
||||
for (it = groups.begin(); it != groups.end(); it++)
|
||||
{
|
||||
del_group(*it, error_msg);
|
||||
del_group_rules(*it);
|
||||
}
|
||||
}
|
||||
|
||||
@ -421,8 +420,6 @@ int Vdc::from_xml(const string& xml)
|
||||
|
||||
int Vdc::add_group(int group_id, string& error_msg)
|
||||
{
|
||||
set<pair<int,int> >::const_iterator it;
|
||||
|
||||
pair<set<int>::iterator,bool> ret;
|
||||
|
||||
ret = groups.insert(group_id);
|
||||
@ -435,25 +432,7 @@ int Vdc::add_group(int group_id, string& error_msg)
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (it = clusters.begin(); it != clusters.end(); it++)
|
||||
{
|
||||
add_cluster_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = hosts.begin(); it != hosts.end(); it++)
|
||||
{
|
||||
add_host_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = datastores.begin(); it != datastores.end(); it++)
|
||||
{
|
||||
add_datastore_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = vnets.begin(); it != vnets.end(); it++)
|
||||
{
|
||||
add_vnet_rules(group_id, it->first, it->second);
|
||||
}
|
||||
add_group_rules(group_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -463,8 +442,6 @@ int Vdc::add_group(int group_id, string& error_msg)
|
||||
|
||||
int Vdc::del_group(int group_id, string& error_msg)
|
||||
{
|
||||
set<pair<int,int> >::const_iterator it;
|
||||
|
||||
if( groups.erase(group_id) != 1 )
|
||||
{
|
||||
ostringstream oss;
|
||||
@ -473,25 +450,7 @@ int Vdc::del_group(int group_id, string& error_msg)
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (it = clusters.begin(); it != clusters.end(); it++)
|
||||
{
|
||||
del_cluster_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = hosts.begin(); it != hosts.end(); it++)
|
||||
{
|
||||
del_host_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = datastores.begin(); it != datastores.end(); it++)
|
||||
{
|
||||
del_datastore_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = vnets.begin(); it != vnets.end(); it++)
|
||||
{
|
||||
del_vnet_rules(group_id, it->first, it->second);
|
||||
}
|
||||
del_group_rules(group_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -707,6 +666,62 @@ int Vdc::del_vnet(int zone_id, int vnet_id, string& error_msg)
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
void Vdc::add_group_rules(int group_id)
|
||||
{
|
||||
set<pair<int,int> >::const_iterator it;
|
||||
|
||||
for (it = clusters.begin(); it != clusters.end(); it++)
|
||||
{
|
||||
add_cluster_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = hosts.begin(); it != hosts.end(); it++)
|
||||
{
|
||||
add_host_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = datastores.begin(); it != datastores.end(); it++)
|
||||
{
|
||||
add_datastore_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = vnets.begin(); it != vnets.end(); it++)
|
||||
{
|
||||
add_vnet_rules(group_id, it->first, it->second);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
void Vdc::del_group_rules(int group_id)
|
||||
{
|
||||
set<pair<int,int> >::const_iterator it;
|
||||
|
||||
for (it = clusters.begin(); it != clusters.end(); it++)
|
||||
{
|
||||
del_cluster_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = hosts.begin(); it != hosts.end(); it++)
|
||||
{
|
||||
del_host_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = datastores.begin(); it != datastores.end(); it++)
|
||||
{
|
||||
del_datastore_rules(group_id, it->first, it->second);
|
||||
}
|
||||
|
||||
for (it = vnets.begin(); it != vnets.end(); it++)
|
||||
{
|
||||
del_vnet_rules(group_id, it->first, it->second);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
void Vdc::add_cluster_rules(int group_id, int zone_id, int cluster_id)
|
||||
{
|
||||
int rc = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user