Hi Pekka, On 11/16/2010 11:05 AM, Pekka.Pessi(a)nokia.com wrote: > From: Pekka Pessi > > --- > drivers/isimodem/voicecall.c | 64 +++++++++++++++++++++++++++--------------- > 1 files changed, 41 insertions(+), 23 deletions(-) > > diff --git a/drivers/isimodem/voicecall.c b/drivers/isimodem/voicecall.c > index c450f12..60052d4 100644 > --- a/drivers/isimodem/voicecall.c > +++ b/drivers/isimodem/voicecall.c > @@ -80,41 +80,57 @@ enum { > /* ------------------------------------------------------------------------- */ > /* Request context for voicecall cb */ > > -struct isi_call_req_context; > - > typedef void isi_call_req_step(struct isi_call_req_context *, int reason); > > struct isi_call_req_context { > - struct isi_call_req_context *next, **prev; > + struct isi_call_req_context *next; > + struct isi_call_req_context **prev; > isi_call_req_step *step; > + int id; > struct ofono_voicecall *ovc; > ofono_voicecall_cb_t cb; > void *data; > }; > > -static struct isi_call_req_context * > -isi_call_req(struct ofono_voicecall *ovc, > - void const *restrict req, > - size_t len, > - GIsiResponse *handler, > - ofono_voicecall_cb_t cb, void *data) > +static struct isi_call_req_context *isi_call_req_new( > + struct ofono_voicecall *ovc, > + ofono_voicecall_cb_t cb, > + void *data) Please indent this some more > { > - struct isi_voicecall *ivc; > struct isi_call_req_context *irc; > > - ivc = ofono_voicecall_get_data(ovc); > - > irc = g_try_new0(struct isi_call_req_context, 1); > + if (irc == NULL) { > + if (cb) > + CALLBACK_WITH_FAILURE(cb, data); doc/docing-style.txt item M1. > + return NULL; > + } > > - if (irc) { > - irc->ovc = ovc; > - irc->cb = cb; > - irc->data = data; > + irc->ovc = ovc; > + irc->cb = cb; > + irc->data = data; > > - if (g_isi_request_make(ivc->client, req, len, > - ISI_CALL_TIMEOUT, handler, irc)) > - return irc; > - } > + return irc; > +} > + > +static struct isi_call_req_context *isi_call_req(struct ofono_voicecall *ovc, > + void const *restrict req, > + size_t len, > + GIsiResponse *handler, > + ofono_voicecall_cb_t cb, > + void *data) > +{ > + struct isi_voicecall *ivc; > + struct isi_call_req_context *irc; > + > + irc = isi_call_req_new(ovc, cb, data); > + if (!irc) > + return NULL; > + > + ivc = ofono_voicecall_get_data(ovc); doc/docing-style.txt item M1. > + if (g_isi_send(ivc->client, req, len, > + ISI_CALL_TIMEOUT, handler, irc, NULL)) > + return irc; > > g_free(irc); > > @@ -125,7 +141,8 @@ isi_call_req(struct ofono_voicecall *ovc, > } > > static void isi_ctx_queue(struct isi_call_req_context *irc, > - isi_call_req_step *next) > + isi_call_req_step *next, > + int id) > { > if (irc->prev == NULL) { > struct isi_voicecall *ivc = ofono_voicecall_get_data(irc->ovc); > @@ -139,6 +156,7 @@ static void isi_ctx_queue(struct isi_call_req_context *irc, > } > > irc->step = next; > + irc->id = id; > } > > static void isi_ctx_remove(struct isi_call_req_context *irc) > @@ -1078,9 +1096,9 @@ static void isi_release_all_active(struct ofono_voicecall *ovc, > if (irc == NULL) > ; > else if (waiting) > - isi_ctx_queue(irc, isi_wait_and_answer); > + isi_ctx_queue(irc, isi_wait_and_answer, 0); > else if (hold) > - isi_ctx_queue(irc, isi_wait_and_retrieve); > + isi_ctx_queue(irc, isi_wait_and_retrieve, 0); > } else > CALLBACK_WITH_FAILURE(cb, data); > } Regards, -Denis