예제 #1
0
void smpi_shared_free(void *ptr)
{
  char loc[PTR_STRLEN];
  shared_metadata_t* meta;
  shared_data_t* data;

  if (!allocs) {
    XBT_WARN("Cannot free: nothing was allocated");
    return;
  }
  if(!allocs_metadata) {
    XBT_WARN("Cannot free: no metadata was allocated");
  }
  snprintf(loc, PTR_STRLEN, "%p", ptr);
  meta = (shared_metadata_t*)xbt_dict_get_or_null(allocs_metadata, loc);
  if (!meta) {
    XBT_WARN("Cannot free: %p was not shared-allocated by SMPI", ptr);
    return;
  }
  data = meta->data;
  if(!data) {
    XBT_WARN("Cannot free: something is broken in the metadata link");
    return;
  }
  if(munmap(ptr, meta->size) < 0) {
    XBT_WARN("Unmapping of fd %d failed: %s", data->fd, strerror(errno));
  }
  data->count--;
  if (data->count <= 0) {
    close(data->fd);
    xbt_dict_remove(allocs, data->loc);
    free(data->loc);
  }
}
예제 #2
0
void print_TIDestroyContainer(paje_event_t event)
{
  if (!xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file")|| xbt_dict_length(tracing_files) == 1) {
    FILE* f = (FILE*)xbt_dict_get_or_null(tracing_files, ((destroyContainer_t) event->data)->container->name);
    fclose(f);
  }
  xbt_dict_remove(tracing_files, ((destroyContainer_t) event->data)->container->name);
}
예제 #3
0
void TRACE_internal_smpi_set_category (const char *category)
{
  if (!TRACE_smpi_is_enabled()) return;

  //declare category
  TRACE_category (category);

  char processid[INSTR_DEFAULT_STR_SIZE];
  snprintf (processid, INSTR_DEFAULT_STR_SIZE, "%p", SIMIX_process_self());
  if (xbt_dict_get_or_null (process_category, processid))
    xbt_dict_remove (process_category, processid);
  if (category != NULL)
    xbt_dict_set (process_category, processid, xbt_strdup(category), NULL);
}
예제 #4
0
void smpi_shared_free(void *ptr)
{
  shared_data_t *data = (shared_data_t *) ((int *) ptr - 1);
  char *loc;

  if (!allocs) {
    XBT_WARN("Cannot free: nothing was allocated");
    return;
  }
  loc = xbt_dict_get_key(allocs, data);
  if (!loc) {
    XBT_WARN("Cannot free: %p was not shared-allocated by SMPI", ptr);
    return;
  }
  data->count--;
  if (data->count <= 0) {
    xbt_dict_remove(allocs, loc);
  }
}
예제 #5
0
void NetworkSmpiModel::gapRemove(Action *lmm_action)
{
    xbt_fifo_t fifo;
    size_t size;
    NetworkCm02Action *action = static_cast<NetworkCm02Action*>(lmm_action);

    if (sg_sender_gap > 0.0 && action->senderLinkName_
            && action->senderFifoItem_) {
        fifo =
            (xbt_fifo_t) xbt_dict_get_or_null(gap_lookup,
                                              action->senderLinkName_);
        xbt_fifo_remove_item(fifo, action->senderFifoItem_);
        size = xbt_fifo_size(fifo);
        if (size == 0) {
            xbt_fifo_free(fifo);
            xbt_dict_remove(gap_lookup, action->senderLinkName_);
            size = xbt_dict_length(gap_lookup);
            if (size == 0) {
                xbt_dict_free(&gap_lookup);
            }
        }
    }
}
예제 #6
0
/** \ingroup XBT_replay
 * \brief Unregisters a function, which handled a kind of action
 *
 * \param action_name the reference name of the action.
 */
void xbt_replay_action_unregister(const char *action_name)
{
  char* lowername = str_tolower (action_name);
  xbt_dict_remove(xbt_action_funs, lowername);
  xbt_free(lowername);
}