diff --git a/channels/chan_phone.c b/channels/chan_phone.c index 62778ed76f4e1ced6d81ab94c8c4851e519d420d..5cee02e6f433ae335d05e5edc38e2c244cd95dd5 100755 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -140,6 +140,7 @@ static struct ast_frame *phone_read(struct ast_channel *ast); static int phone_write(struct ast_channel *ast, struct ast_frame *frame); static struct ast_frame *phone_exception(struct ast_channel *ast); static int phone_send_text(struct ast_channel *ast, const char *text); +static int phone_fixup(struct ast_channel *old, struct ast_channel *new); static const struct ast_channel_tech phone_tech = { .type = type, @@ -153,6 +154,7 @@ static const struct ast_channel_tech phone_tech = { .read = phone_read, .write = phone_write, .exception = phone_exception, + .fixup = phone_fixup }; static struct ast_channel_tech phone_tech_fxs = { @@ -168,10 +170,19 @@ static struct ast_channel_tech phone_tech_fxs = { .exception = phone_exception, .write_video = phone_write, .send_text = phone_send_text, + .fixup = phone_fixup }; static struct ast_channel_tech *cur_tech; +static int phone_fixup(struct ast_channel *old, struct ast_channel *new) +{ + struct phone_pvt *pvt = old->tech_pvt; + if (pvt && pvt->owner == old) + pvt->owner = new; + return 0; +} + static int phone_digit(struct ast_channel *ast, char digit) { struct phone_pvt *p;