Esempio n. 1
0
int     smem_remove(char *filename)
 { int nitems, h, r;

   if (NULL == filename) return(SHARED_NULPTR);
   nitems = sscanf(filename, "h%d", &h);
   if (1 != nitems) return(SHARED_BADARG);

   if (0 == shared_check_locked_index(h))       /* are we locked ? */

     { if (-1 != shared_lt[h].lkcnt)            /* are we locked RO ? */
         { if (SHARED_OK != (r = shared_unlock(h))) return(r);  /* yes, so relock in RW */
           if (NULL == shared_lock(h, SHARED_RDWRITE)) return(SHARED_BADARG);
         }

     }
   else                                         /* not locked */
     { if (SHARED_OK != (r = smem_open(filename, READWRITE, &h)))
         return(r);                             /* so open in RW mode */
     }

   shared_set_attr(h, SHARED_RESIZE);           /* delete PERSIST attribute */
   return(smem_close(h));                       /* detach segment (this will delete it) */
 }
Esempio n. 2
0
/*
===============================

===============================
*/
void destroy_soar_agent (agent * delete_agent)
{
  //print(delete_agent, "\nDestroying agent %s.\n", delete_agent->name);  /* AGR 532 */

  /////////////////////////////////////////////////////////
  // Soar Modules - could potentially rely on hash tables
  /////////////////////////////////////////////////////////

  // cleanup exploration
  for ( int i=0; i<EXPLORATION_PARAMS; i++ )
	  delete delete_agent->exploration_params[ i ];

  // cleanup Soar-RL
  delete_agent->rl_params->apoptosis->set_value( rl_param_container::apoptosis_none );
  delete delete_agent->rl_prods;
  delete delete_agent->rl_params;
  delete delete_agent->rl_stats;
  delete_agent->rl_params = NULL; // apoptosis needs to know this for excise_all_productions below

  // cleanup select
  select_init( delete_agent );
  delete delete_agent->select;

  // cleanup predict
  delete delete_agent->prediction;

  // cleanup wma
  delete_agent->wma_params->activation->set_value( off );
  delete delete_agent->wma_forget_pq;
  delete delete_agent->wma_touched_elements;
  delete delete_agent->wma_touched_sets;
  delete delete_agent->wma_params;
  delete delete_agent->wma_stats;
  delete delete_agent->wma_timers;

  // cleanup epmem
  epmem_close( delete_agent );
  delete delete_agent->epmem_params;
  delete delete_agent->epmem_stats;
  delete delete_agent->epmem_timers;

  delete delete_agent->epmem_node_removals;
  delete delete_agent->epmem_node_mins;
  delete delete_agent->epmem_node_maxes;
  delete delete_agent->epmem_edge_removals;
  delete delete_agent->epmem_edge_mins;
  delete delete_agent->epmem_edge_maxes;
  delete delete_agent->epmem_id_repository;
  delete delete_agent->epmem_id_replacement;
  delete delete_agent->epmem_id_ref_counts;
  delete delete_agent->epmem_id_removes;

  delete delete_agent->epmem_wme_adds;
  delete delete_agent->epmem_promotions;

  delete delete_agent->epmem_db;


  // cleanup smem
  smem_close( delete_agent );
  delete delete_agent->smem_changed_ids;
  delete delete_agent->smem_params;
  delete delete_agent->smem_stats;
  delete delete_agent->smem_timers;

  delete delete_agent->smem_db;

  // cleanup statistics db
  stats_close( delete_agent );
  delete delete_agent->stats_db;
  delete_agent->stats_db = 0;

  delete delete_agent->debug_params;

  /////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////

  remove_built_in_rhs_functions(delete_agent);

  getSoarInstance()->Delete_Agent(delete_agent->name);

  /* Free structures stored in agent structure */
  free(delete_agent->name);
  free(delete_agent->top_dir_stack->directory);
  free(delete_agent->top_dir_stack);

  /* Freeing the agent's multi attributes structure */
  multi_attribute* lastmattr = 0;
  for ( multi_attribute* curmattr = delete_agent->multi_attributes;
        curmattr != 0;
        curmattr = curmattr->next ) {

     symbol_remove_ref(delete_agent, curmattr->symbol);

     free_memory(delete_agent, lastmattr, MISCELLANEOUS_MEM_USAGE);
     lastmattr = curmattr;
  }
  free_memory(delete_agent, lastmattr, MISCELLANEOUS_MEM_USAGE);

  /* Freeing all the productions owned by this agent */
  excise_all_productions(delete_agent, false);

  /* Releasing all the predefined symbols */
  release_predefined_symbols(delete_agent);

  /* Releasing rete stuff RPM 11/06 */
  free_with_pool(&delete_agent->rete_node_pool, delete_agent->dummy_top_node);
  free_with_pool(&delete_agent->token_pool, delete_agent->dummy_top_token);

  /* Cleaning up the various callbacks
     TODO: Not clear why callbacks need to take the agent pointer essentially twice.
  */
  soar_remove_all_monitorable_callbacks(delete_agent);

  /* RPM 9/06 begin */

  free_memory(delete_agent, delete_agent->left_ht, HASH_TABLE_MEM_USAGE);
  free_memory(delete_agent, delete_agent->right_ht, HASH_TABLE_MEM_USAGE);
  free_memory(delete_agent, delete_agent->rhs_variable_bindings, MISCELLANEOUS_MEM_USAGE);

  /* Releasing memory allocated in inital call to start_lex_from_file from init_lexer */
  free_memory_block_for_string(delete_agent, delete_agent->current_file->filename);
  free_memory (delete_agent, delete_agent->current_file, MISCELLANEOUS_MEM_USAGE);

  /* Releasing trace formats (needs to happen before tracing hashtables are released) */
  remove_trace_format (delete_agent, FALSE, FOR_ANYTHING_TF, NIL);
  remove_trace_format (delete_agent, FALSE, FOR_STATES_TF, NIL);
  Symbol *evaluate_object_sym = find_sym_constant (delete_agent, "evaluate-object");
  remove_trace_format (delete_agent, FALSE, FOR_OPERATORS_TF, evaluate_object_sym);
  remove_trace_format (delete_agent, TRUE, FOR_STATES_TF, NIL);
  remove_trace_format (delete_agent, TRUE, FOR_OPERATORS_TF, NIL);

  /* Releasing hashtables allocated in init_tracing */
  for (int i=0; i<3; i++) {
	free_hash_table(delete_agent, delete_agent->object_tr_ht[i]);
	free_hash_table(delete_agent, delete_agent->stack_tr_ht[i]);
  }

  /* Releasing memory allocated in init_rete */
  for (int i=0; i<16; i++) {
	  free_hash_table(delete_agent, delete_agent->alpha_hash_tables[i]);
  }

  /* Releasing other hashtables */
  free_hash_table(delete_agent, delete_agent->variable_hash_table);
  free_hash_table(delete_agent, delete_agent->identifier_hash_table);
  free_hash_table(delete_agent, delete_agent->sym_constant_hash_table);
  free_hash_table(delete_agent, delete_agent->int_constant_hash_table);
  free_hash_table(delete_agent, delete_agent->float_constant_hash_table);

  /* Releasing memory pools */
  memory_pool* cur_pool = delete_agent->memory_pools_in_use;
  memory_pool* next_pool;
  while(cur_pool != NIL) {
	  next_pool = cur_pool->next;
	  free_memory_pool(delete_agent, cur_pool);
	  cur_pool = next_pool;
  }

  /* RPM 9/06 end */

  // dynamic memory pools (cleared in the last step)
  for ( std::map< size_t, memory_pool* >::iterator it=delete_agent->dyn_memory_pools->begin(); it!=delete_agent->dyn_memory_pools->end(); it++ )
  {
	  delete it->second;
  }
  delete delete_agent->dyn_memory_pools;

  delete delete_agent->dyn_counters;

  // JRV: Frees data used by XML generation
  xml_destroy( delete_agent );

  /* Free soar agent structure */
  delete delete_agent;
}