maximkulkin / esp-homekit

Apple HomeKit accessory server library for ESP-OPEN-RTOS
MIT License
1.12k stars 169 forks source link

Core 0 panic'ed (Load access fault). Exception was unhandled. #218

Closed mriksman closed 6 days ago

mriksman commented 6 days ago

Hey,

It's been a long time since I've last used your program, so I decided to update to ESP-IDF 5.1.1, pull woflssl from Espressif's port of it, and pull your latest.

I loaded it all on to a new chip, and apart from a complaint about json_uint32 unsigned long int (which I fixed by changing %u to %lu), everything compiled fine.

When I added an accessory, I hit the below issue.

>>> HomeKit: [Client 1] Got new client connection from 192.168.6.31
I (29452) main: HOMEKIT_EVENT_CLIENT_CONNECTED
>>> HomeKit: [Client 1] Pair Setup Step 1/3
>>> HomeKit: [Client 1] Pair Setup Step 2/3
>>> HomeKit: [Client 1] Pair Setup Step 3/3
>>> HomeKit: Added pairing with BF76939D-D444-4940-B00D-177AE59F3E95
I (39537) main: HOMEKIT_EVENT_PAIRING_ADDED or HOMEKIT_EVENT_PAIRING_REMOVED
>>> HomeKit: Configuring mDNS
E (39566) mdns: mdns_service_add_for_host(5898): Service already exists
>>> HomeKit: [Client 1] Successfully paired
>>> HomeKit: [Client 1] Closing client connection from 192.168.6.31
I (39629) main: HOMEKIT_EVENT_CLIENT_DISCONNECTED
>>> HomeKit: [Client 1] Got new client connection from 192.168.6.31
I (39645) main: HOMEKIT_EVENT_CLIENT_CONNECTED
>>> HomeKit: [Client 1] Pair Verify Step 1/2
>>> HomeKit: [Client 1] Pair Verify Step 2/2
>>> HomeKit: [Client 1] Found pairing with BF76939D-D444-4940-B00D-177AE59F3E95
>>> HomeKit: [Client 1] Verification successful, secure session established
>>> HomeKit: [Client 1] Get Accessories
Guru Meditation Error: Core  0 panic'ed (Load access fault). Exception was unhandled.

Core  0 register dump:
MEPC    : 0x400587d2  RA      : 0x42015eb2  SP      : 0x3fcb3c90  GP      : 0x3fc91400  
0x400587d2: __strtok_r in ROM

0x42015eb2: json_write at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:76

TP      : 0x3fc7aba0  T0      : 0x00802710  T1      : 0x00000000  T2      : 0x3996f104  
S0/FP   : 0x00000400  S1      : 0x3fcb0c98  A0      : 0x3fcb0862  A1      : 0x40060000  
A2      : 0x00000400  A3      : 0x0000003f  A4      : 0x3fcb0c62  A5      : 0x3fcb0a06  
A6      : 0x00000019  A7      : 0x00000000  S2      : 0xffc53e9c  S3      : 0x4005fe5c  
S4      : 0x3fcb3d40  S5      : 0x00000000  S6      : 0x3fc94480  S7      : 0x00000000  
S8      : 0x00000000  S9      : 0x0000003f  S10     : 0x3fc90fe8  S11     : 0x3fcb048d  
T3      : 0x00000000  T4      : 0x00000000  T5      : 0x04000000  T6      : 0x0001898c  
MSTATUS : 0x00001881  MTVEC   : 0x40380001  MCAUSE  : 0x00000005  MTVAL   : 0x40060000  
0x40380001: _vector_table at ??:?

MHARTID : 0x00000000  

Stack memory:
3fcb3c90: 0x3fcb0862 0x3fc9acc8 0x3fc9acc8 0x3fc9acc8 0x3c0eb8e8 0x3fcb022c 0x3fcb0c98 0x42015f02
0x42015f02: _do_write at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:198

3fcb3cb0: 0x0000001e 0x3fcb022c 0x3fcb0c98 0x42016176 0xfffffffe 0x3fcb3cfa 0x3fcb0c98 0x3fcb3ce0
0x42016176: _json_number at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:213

3fcb3cd0: 0x3c0eb8e8 0x3c0ff474 0x3fcb3cf4 0x42016316 0x00000004 0x3fcb022c 0x3fcb0c98 0x42016412
0x42016316: json_uint64 at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:254

0x42016412: json_string at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:296

3fcb3cf0: 0x3fcb0e14 0x3c0ff474 0x30330c98 0x3fcb3d00 0x3fcb0e14 0x3fcb022c 0x3fcb0c98 0x4200f51c
0x4200f51c: write_characteristic_json at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:806

3fcb3d10: 0x00000004 0x3fcb02d4 0x3fcb0c98 0x42016412 0x00000012 0x3fcb0340 0x00000000 0x3fc9acc8
0x42016412: json_string at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/json.c:296

3fcb3d30: 0x3fcb0320 0x3fcb022c 0x3fcb0c98 0x42010fbe 0x00000012 0x00000000 0x0000001e 0x00000000
0x42010fbe: homekit_server_on_get_accessories at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:2594 (discriminator 3)

3fcb3d50: 0x3fcb0491 0x3fcb0452 0x00000000 0x0000003f 0x00010000 0x3fcb0490 0x3fc9acc8 0x42013f86
0x42013f86: homekit_server_on_message_complete at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:3597

3fcb3d70: 0x00000020 0x3fcb0462 0x3fcb0c74 0x420344d0 0x00000000 0x3fc9acc8 0x0000003f 0x00000000
0x420344d0: http_parser_execute at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/http-parser/http-parser/http_parser.c:1862 (discriminator 3)

3fcb3d90: 0x00000000 0x00000000 0x00000000 0x00000000 0x0000003f 0x00000000 0x00000000 0x00000000
3fcb3db0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x0000003f 0x00000000
3fcb3dd0: 0x3fcb0452 0x00000051 0x3fc9acc8 0x4200fd4e 0x00000000 0x00000000 0x00000000 0x0000003f
0x4200fd4e: homekit_client_process at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:3706

3fcb3df0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000001 0x3fcb034c 0x3fc9acc8 0x420127ea
0x420127ea: homekit_run_server at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:4033

3fcb3e10: 0x00000000 0x00000000 0x00000000 0x00400000 0x00000001 0x00000000 0x00000000 0x420dcb1c
0x420dcb1c: esp_event_post at /home/mriksman/esp-idf/esp-idf/components/esp_event/default_event_loop.c:77

3fcb3e30: 0xb4150230 0x00000000 0x30303030 0x30303030 0x00000000 0x3fcb0360 0x3fcb034c 0x420140cc
0x420140cc: homekit_server_task at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:4202 (discriminator 3)

3fcb3e50: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fcb3e70: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fcb3e90: 0x40388860 0x00000000 0x00000000 0x3fc91400 0x3fc7aba0 0x00000000 0x00000000 0x00000000
0x40388860: vPortTaskWrapper at /home/mriksman/esp-idf/esp-idf/components/freertos/FreeRTOS-Kernel/portable/riscv/port.c:198

3fcb3eb0: 0x00000000 0x00000000 0x42014046 0x3fcb034c 0x00000000 0x00000000 0x00000000 0x00000000
0x42014046: homekit_server_task at /home/mriksman/Projects/esp32_homekit_light_switch_v5/components/esp-homekit/src/server.c:4154

3fcb3ed0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000010
3fcb3ef0: 0x00000000 0x00000000 0x00000000 0x4038886c 0x00000000 0x00000000 0x00000000 0x00000000
0x4038886c: vPortTaskWrapper at /home/mriksman/esp-idf/esp-idf/components/freertos/FreeRTOS-Kernel/portable/riscv/port.c:205

3fcb3f10: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
3fcb3f30: 0xa5a5a5a5 0x00000160 0x3fcb3600 0x0000a15d 0x3fc93ac8 0x3fc93ac8 0x3fcb3f38 0x3fc93ac0
3fcb3f50: 0x00000018 0x3fcb4350 0x3fcb4350 0x3fcb3f38 0x00000000 0x00000001 0x3fcb0f34 0x656d6f48
3fcb3f70: 0x2074694b 0x76726553 0x00007265 0x00000000 0x3fcb3f30 0x0000000a 0x00000000 0x00000001
3fcb3f90: 0x00000000 0x3fcb4384 0x42000262 0x00f80dc7 0x0000000b 0x3fc992c0 0x3fc99328 0x3fc99390
0x42000262: pthread_cleanup_thread_specific_data_callback at /home/mriksman/esp-idf/esp-idf/components/pthread/pthread_local_storage.c:126

3fcb3fb0: 0x00000000 0x00000000 0x00000001 0x00000000 0x00000000 0x00000000 0x420c9232 0x00000000
0x420c9232: _cleanup_r at /builds/idf/crosstool-NG/.build/riscv32-esp-elf/src/newlib/newlib/libc/stdio/findfp.c:229

3fcb3fd0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
3fcb3ff0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
3fcb4010: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
3fcb4030: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
3fcb4050: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
3fcb4070: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000

I was hoping you could make sense of it?

mriksman commented 6 days ago

Debug.txt This is with Debug turned on. It keeps doing the payload which eventually turns to repeating this over and over

>>> client_sendv: [Client 1] Sending payload: \x34\x30\x30\x0D\x0A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0D\x0A

And I give up waiting.

mriksman commented 6 days ago

Hmm. Perhaps my custom characteristic "Num Restarts"

            *(c++) = NEW_HOMEKIT_CHARACTERISTIC(
                        CUSTOM,
                        .type = "02B77073-DA5D-493C-829D-F6C5DCFE5C28",
                        .description = "Num Restarts",
                        .format = homekit_format_uint64,
                        .permissions = homekit_permissions_paired_read |
                                    homekit_permissions_notify,
                        .value = HOMEKIT_UINT64_(num_restarts),
                    );

In the debug.txt, things seem to go bad around there...?

>>> client_sendv: [Client 1] Sending payload: 400\x0D\x0A{"accessories":[{"aid":1,"services":[{"iid":1,"type":"0000003E-0000-1000-8000-0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":2,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"esp-4bec98"},{"aid":1,"iid":3,"type":"00000020-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Manufacturer","format":"string","value":"Riksman"},{"aid":1,"iid":4,"type":"00000030-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Serial Number","format":"string","value":"esp-4bec98"},{"aid":1,"iid":5,"type":"00000021-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Model","format":"string","value":"ESP-C3-12F"},{"aid":1,"iid":6,"type":"00000052-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Firmware Revision","format":"string","value":"10.0.0"},{"aid":1,"iid":7,"type":"00000014-0000-1000-8000-0026BB765291","perms":["pw"],"description":"Identify","format":"bool"}]},{"iid":8,"type":"00000049-0000-1000-8000-\x0D\x0A
>>> client_sendv: [Client 1] Sending payload: 400\x0D\x0A0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":9,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"Light 1"},{"aid":1,"iid":10,"type":"00000025-0000-1000-8000-0026BB765291","perms":["pr","pw","ev"],"ev":false,"description":"On","format":"bool","value":false},{"aid":1,"iid":11,"type":"02B77072-DA5D-493C-829D-F6C5DCFE5C28","perms":["pr","ev"],"ev":false,"description":"Restart Reason","format":"string","value":"Software reset"},{"aid":1,"iid":12,"type":"02B77073-DA5D-493C-829D-F6C5DCFE5C28","perms":["pr","ev"],"ev":false,"description":"Num Restarts","format":"uint64","value":44\x00@\xCB?\xB4\x11\xCB?\xCC\x05\xCB?8\x10\xCB?|\xF5\x00B\x04\x00\x00\x00t\x06\xCB?8\x10\xCB?\xDCp\x01B\x12\x00\x00\x00\xE0\x06\xCB?\x00\x00\x00\x00\xE0\xAD\xC9?\xC0\x06\xCB?\xCC\x05\xCB?8\x10\xCB?$\x13\x01B\x12\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x001\x08\xCB?\xF2\x07\xCB?\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x01\x000\x08\xCB?\xE0\xAD\xC9?FG\x01B \x00\x00\x00\x02\x08\xCB?\x14\x10\xCB?\xEEQ\x03B\xC8\xBD\x0F<\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC8\xBD\x0F<?\x00\x00\x00\x18\xEC\xCA?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\x00\x00\x00\xF2\x07\xCB?\x00\x00\x00\x00Q\x00\x00\x00\xE0\xAD\xC9?\xAE\xFD\x00B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xEC\x06\xCB?\xE0\xAD\xC9?\xE6,\x01B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\xD8\x0DB0\x02\x15\xB4\x00\x00\x00\x0000000000\x00\x00\x00\x00\x00\x07\xCB?\xEC\x06\xCB?\xA0H\x01B\xA5\xA5\xA5\xA5\xA5\xA5\xA5\xA5\xA5\xA5\xA5\xA5\x0D\x0A

I commented out the custom characteristic, and everything is fine. I'll need to debug why. Sorry to have pointed the finger at your software! Whoops!

Any idea why it was working on the old version, but isn't working on the new version? Can you see anything obvious?

mriksman commented 6 days ago

Found it.

The variable num_restarts was a uint8_t. Yet the custom characteristic was using UINT64. Not sure why this worked before and not now. I changed the custom characteristic to UINT8 and it works.