All pastes #433577 Raw Edit

Something

public c v1 · immutable
·published 2007-04-10 21:37 UTC
rendered paste body
static void send_monitor_end_messages(co_monitor_t *cmon){        co_manager_open_desc_t opened;        int i;        co_os_mutex_acquire(cmon->connected_modules_write_lock);        for (i = 0; i <  CO_MONITOR_MODULES_COUNT; i++) {                opened = cmon->connected_modules[i];                if (!opened)                        continue;                co_manager_send_eof(cmon->manager, opened);                cmon->connected_modules[i] = NULL;		<--- !!! Crash !!!                co_manager_close(cmon->manager, opened);        }        co_os_mutex_release(cmon->connected_modules_write_lock);}co_rc_t co_monitor_refdown(co_monitor_t *cmon, bool_t user_context, bool_t monitor_owner){        co_manager_t *manager;        int new_count;        bool_t destroy = PFALSE;        bool_t end_messages = PFALSE;        manager = cmon->manager;        co_os_mutex_acquire(manager->lock);        new_count = cmon->refcount;        if (new_count > 0) {                cmon->refcount--;                if (monitor_owner  &&  cmon->listed_in_manager) {                        cmon->listed_in_manager = PFALSE;                        manager->monitors_count--;                        co_list_del(&cmon->node);                }                if (monitor_owner)                        end_messages = PTRUE;                if (cmon->refcount == 0) {                        destroy = PTRUE;                }        }        co_os_mutex_release(manager->lock);        if (end_messages)                send_monitor_end_messages(cmon);        if (destroy) {                return co_monitor_destroy(cmon, monitor_owner);        }        return CO_RC(OK);}