Esempio n. 1
0
int HeapBlockDevice::deinit()
{
    if (!_is_initialized) {
        return BD_ERROR_OK;
    }

    uint32_t val = core_util_atomic_decr_u32(&_init_ref_count, 1);

    if (val) {
        return BD_ERROR_OK;
    }

    MBED_ASSERT(_blocks != NULL);
    // Memory is lazily cleaned up in destructor to allow
    // data to live across de/reinitialization
    _is_initialized = false;
    return BD_ERROR_OK;
}
Esempio n. 2
0
int ChainingBlockDevice::deinit()
{
    if (!_is_initialized) {
        return BD_ERROR_OK;
    }

    uint32_t val = core_util_atomic_decr_u32(&_init_ref_count, 1);

    if (val) {
        return BD_ERROR_OK;
    }

    for (size_t i = 0; i < _bd_count; i++) {
        int err = _bds[i]->deinit();
        if (err) {
            return err;
        }
    }

    _is_initialized = false;
    return BD_ERROR_OK;
}
Esempio n. 3
0
void *core_util_atomic_decr_ptr(void **valuePtr, ptrdiff_t delta) {
    return (void *)core_util_atomic_decr_u32((uint32_t *)valuePtr, (uint32_t)delta);
}