Exemple #1
0
static int mb_shutdown (void) /* {{{ */
{
  data_free_all (data_definitions);
  data_definitions = NULL;

  return (0);
} /* }}} int mb_shutdown */
Exemple #2
0
static int mb_config_add_slave (mb_host_t *host, oconfig_item_t *ci) /* {{{ */
{
  mb_slave_t *slave;
  int status;
  int i;

  if ((host == NULL) || (ci == NULL))
    return (EINVAL);

  slave = realloc (host->slaves, sizeof (*slave) * (host->slaves_num + 1));
  if (slave == NULL)
    return (ENOMEM);
  host->slaves = slave;
  slave = host->slaves + host->slaves_num;
  memset (slave, 0, sizeof (*slave));
  slave->collect = NULL;

  status = cf_util_get_int (ci, &slave->id);
  if (status != 0)
    return (status);

  for (i = 0; i < ci->children_num; i++)
  {
    oconfig_item_t *child = ci->children + i;
    status = 0;

    if (strcasecmp ("Instance", child->key) == 0)
      status = cf_util_get_string_buffer (child,
          slave->instance, sizeof (slave->instance));
    else if (strcasecmp ("Collect", child->key) == 0)
    {
      char buffer[1024];
      status = cf_util_get_string_buffer (child, buffer, sizeof (buffer));
      if (status == 0)
        data_copy_by_name (&slave->collect, data_definitions, buffer);
      status = 0; /* continue after failure. */
    }
    else
    {
      ERROR ("Modbus plugin: Unknown configuration option: %s", child->key);
      status = -1;
    }

    if (status != 0)
      break;
  }

  if ((status == 0) && (slave->collect == NULL))
    status = EINVAL;

  if (slave->id < 0)
    status = EINVAL;

  if (status == 0)
    host->slaves_num++;
  else /* if (status != 0) */
    data_free_all (slave->collect);

  return (status);
} /* }}} int mb_config_add_slave */
Exemple #3
0
static void slaves_free_all (mb_slave_t *slaves, size_t slaves_num) /* {{{ */
{
  size_t i;

  if (slaves == NULL)
    return;

  for (i = 0; i < slaves_num; i++)
    data_free_all (slaves[i].collect);
  sfree (slaves);
} /* }}} void slaves_free_all */
Exemple #4
0
static void data_free_all (mb_data_t *data) /* {{{ */
{
  mb_data_t *next;

  if (data == NULL)
    return;

  next = data->next;
  data_free_one (data);

  data_free_all (next);
} /* }}} void data_free_all */
NanostackSocket::~NanostackSocket()
{
    nanostack_assert_locked();

    if (mode != SOCKET_MODE_CLOSED) {
        close();
    }
    if (socket_id >= 0) {
        int ret = socket_free(socket_id);
        MBED_ASSERT(0 == ret);
        MBED_ASSERT(socket_tbl[socket_id] == this);
        socket_id = -1;
        data_free_all();
    }

}
void NanostackSocket::close()
{
    nanostack_assert_locked();
    MBED_ASSERT(mode != SOCKET_MODE_CLOSED);

    if (socket_id >= 0) {
        int ret = socket_close(socket_id, (addr_valid ? &ns_address : NULL));
        MBED_ASSERT(0 == ret);
    } else {
        MBED_ASSERT(SOCKET_MODE_UNOPENED == mode);
    }

    data_free_all();

    mode = SOCKET_MODE_CLOSED;
    signal_event();
}