It's because both `amodem_unsol` and `handleSignalStrength` use `modem->out_buff` for storing output messages.  You may want to create a new function `amodem_unsol_buffered` which:

```
static void
amodem_unsol_buffered( AModem  modem, const char* message )
{
    if (modem->unsol_func) {
        modem->unsol_func( modem->unsol_opaque, message );
    }
}

static void
static void amodem_unsol( AModem  modem, const char* format, ... )
{
    va_list  args;
    va_start(args, format);
    vsnprintf( modem->out_buff, sizeof(modem->out_buff), format, args );
    va_end(args);

    amodem_unsol_buffered( modem, modem->out_buff );
}
```