Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash on cold page load. #20

Open
zekageri opened this issue Mar 1, 2023 · 0 comments
Open

Crash on cold page load. #20

zekageri opened this issue Mar 1, 2023 · 0 comments

Comments

@zekageri
Copy link

zekageri commented Mar 1, 2023

[1750479][E][AsyncTCP.cpp:797] _flushWriteQueue(): socket 50 lwip_write() failed errno=104

assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))


Backtrace: 0x40083d69:0x3ffdd880 0x4008eeb1:0x3ffdd8a0 0x400948b5:0x3ffdd8c0 0x4008fec1:0x3ffdd9f0 0x401b08fb:0x3ffdda30 0x401b0a5c:0x3ffdda50 0x401b0ba3:0x3ffdda80 0x401b0eb5:0x3ffddab0 0x401b0293:0x3ffddb10

  #0  0x40083d69:0x3ffdd880 in panic_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/panic.c:402
  #1  0x4008eeb1:0x3ffdd8a0 in esp_system_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/esp_system.c:128  
  #2  0x400948b5:0x3ffdd8c0 in __assert_func at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/newlib/assert.c:85
  #3  0x4008fec1:0x3ffdd9f0 in xQueueSemaphoreTake at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/freertos/queue.c:1549 (discriminator 1)
  #4  0x401b08fb:0x3ffdda30 in std::_Deque_iterator<AsyncClient::queued_writebuf, AsyncClient::queued_writebuf&, AsyncClient::queued_writebuf*>::difference_type std::operator-<AsyncClient::queued_writebuf, AsyncClient::queued_writebuf&, AsyncClient::queued_writebuf*>(std::_Deque_iterator<AsyncClient::queued_writebuf, AsyncClient::queued_writebuf&, AsyncClient::queued_writebuf*> const&, std::_Deque_iterator<AsyncClient::queued_writebuf, AsyncClient::queued_writebuf&, AsyncClient::queued_writebuf*> const&) at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/stl_deque.h:357
  #5  0x401b0a5c:0x3ffdda50 in AsyncClient::_error(signed char) at lib/AsyncTCPSock/src/AsyncTCP.cpp:986
  #6  0x401b0ba3:0x3ffdda80 in __gnu_cxx::new_allocator<AsyncClient::notify_writebuf>::deallocate(AsyncClient::notify_writebuf*, unsigned int) at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\ext/new_allocator.h:125    
      (inlined by) std::allocator_traits<std::allocator<AsyncClient::notify_writebuf> >::deallocate(std::allocator<AsyncClient::notify_writebuf>&, AsyncClient::notify_writebuf*, unsigned int) at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/alloc_traits.h:462
      (inlined by) std::_Deque_base<AsyncClient::notify_writebuf, std::allocator<AsyncClient::notify_writebuf> >::_M_deallocate_node(AsyncClient::notify_writebuf*) at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/stl_deque.h:610
      (inlined by) std::deque<AsyncClient::notify_writebuf, std::allocator<AsyncClient::notify_writebuf> >::_M_pop_front_aux() at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/deque.tcc:568
      (inlined by) std::deque<AsyncClient::notify_writebuf, std::allocator<AsyncClient::notify_writebuf> >::pop_front() at c:\users\pc\.platformio\packages\toolchain-xtensa-esp32@8.4.0+2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits/stl_deque.h:1599
      (inlined by) AsyncClient::_notifyWrittenBuffers(std::deque<AsyncClient::notify_writebuf, std::allocator<AsyncClient::notify_writebuf> >&, int) at lib/AsyncTCPSock/src/AsyncTCP.cpp:842
  #7  0x401b0eb5:0x3ffddab0 in AsyncClient::_sockIsWriteable() at lib/AsyncTCPSock/src/AsyncTCP.cpp:728
  #8  0x401b0293:0x3ffddb10 in _asynctcpsock_task(void*) at lib/AsyncTCPSock/src/AsyncTCP.cpp:138




ELF file SHA256: d0cb80949abd78a8

Rebooting...

Here is the relevant part in AsyncTCP.cpp

bool AsyncClient::_flushWriteQueue(void)
{
    bool activity = false;

    if (_socket == -1) return false;

    for (auto it = _writeQueue.begin(); it != _writeQueue.end(); it++) {
        // Abort iteration if error found while writing a buffer
        if (it->write_errno != 0) break;

        // Skip over head buffers already fully written
        if (it->written >= it->length) continue;

        bool keep_writing = true;
        do {
            uint8_t * p = it->data + it->written;
            size_t n = it->length - it->written;
            errno = 0;
            ssize_t r;

#if ASYNC_TCP_SSL_ENABLED
            if (_sslctx != NULL) {
                r = _sslctx->write(p, n);
                if (ASYNCTCP_TLS_CAN_RETRY(r)) {
                    r = -1;
                    errno = EAGAIN;
                } else if (ASYNCTCP_TLS_EOF(r)) {
                    r = -1;
                    errno = EPIPE;
                } else if (r < 0) {
                    if (errno == 0) errno = EIO;
                }
            } else {
#endif
                r = lwip_write(_socket, p, n);
#if ASYNC_TCP_SSL_ENABLED
            }
#endif

            if (r >= 0) {
                // Written some data into the socket
                it->written += r;
                _writeSpaceRemaining += r;
                activity = true;

                if (it->written >= it->length) {
                    it->written_at = millis();
                    if (it->owned) ::free(it->data);
                    it->data = NULL;
                }
            } else if (errno == EAGAIN || errno == EWOULDBLOCK) {
                // Socket is full, could not write anything
                keep_writing = false;
            } else {
                // A write error happened that should be reported
                it->write_errno = errno;
                keep_writing = false;
                log_e("socket %d lwip_write() failed errno=%d", _socket, it->write_errno);
            }
        } while (keep_writing && it->written < it->length);
    }

    return activity;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant