2011-10-07 09:11:09

by Slawomir Bochenski

[permalink] [raw]
Subject: [PATCH obexd 0/1] Fix OPP not sending TransferCompleted signal

The following is kind of a lazy fix. Share your view on dealing with that. I'd
guess that more appropriate fix would be to remove the "os->object != NULL"
check from manager_emit_transfer_completed() and instead make a simple session
object in OPP being single gboolean or even use user_data pointer directly as a
boolean indicator to let the opp_reset() know whether or not
obex_put_stream_start() was successful.

Btw shouldn't we also do manager_emit_transfer_started() in opp_get()?


2011-10-11 13:01:42

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH obexd 1/1] Fix OPP not sending TransferCompleted signal

Hi Slawek,

On Fri, Oct 07, 2011, Slawomir Bochenski wrote:
> Commit 934b3b2f5f8432b67822be9f83a141fe3783cbd7 introduced a regression
> in OPP, by making it not send TransferCompleted signal. This happened
> because OPP was calling manager_emit_transfer_completed() on .reset(),
> and manager_emit_transfer_completed() in turn checks if the os->object
> is not NULL. This fixes this by moving clearing os->object after doing
> service driver .reset().
> ---
> src/obex.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)

Applied. Thanks.

Johan

2011-10-11 09:46:09

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH obexd 1/1] Fix OPP not sending TransferCompleted signal

Hi Slawomir,

On Fri, Oct 7, 2011 at 12:11 PM, Slawomir Bochenski <[email protected]> wrote:
> Commit 934b3b2f5f8432b67822be9f83a141fe3783cbd7 introduced a regression
> in OPP, by making it not send TransferCompleted signal. This happened
> because OPP was calling manager_emit_transfer_completed() on .reset(),
> and manager_emit_transfer_completed() in turn checks if the os->object
> is not NULL. This fixes this by moving clearing os->object after doing
> service driver .reset().
> ---
> ?src/obex.c | ? ?4 ++--
> ?1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/obex.c b/src/obex.c
> index 59bbe7a..a0c17c1 100644
> --- a/src/obex.c
> +++ b/src/obex.c
> @@ -288,8 +288,6 @@ static void os_reset_session(struct obex_session *os)
> ? ? ? ?if (os->object) {
> ? ? ? ? ? ? ? ?os->driver->set_io_watch(os->object, NULL, NULL);
> ? ? ? ? ? ? ? ?os->driver->close(os->object);
> - ? ? ? ? ? ? ? os->object = NULL;
> - ? ? ? ? ? ? ? os->obj = NULL;
> ? ? ? ? ? ? ? ?if (os->aborted && os->cmd == OBEX_CMD_PUT && os->path &&
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?os->driver->remove)
> ? ? ? ? ? ? ? ? ? ? ? ?os->driver->remove(os->path);
> @@ -315,6 +313,8 @@ static void os_reset_session(struct obex_session *os)
> ? ? ? ? ? ? ? ?os->path = NULL;
> ? ? ? ?}
>
> + ? ? ? os->object = NULL;
> + ? ? ? os->obj = NULL;
> ? ? ? ?os->driver = NULL;
> ? ? ? ?os->aborted = FALSE;
> ? ? ? ?os->pending = 0;
> --
> 1.7.4.1

Ack.

--
Luiz Augusto von Dentz

2011-10-07 09:11:10

by Slawomir Bochenski

[permalink] [raw]
Subject: [PATCH obexd 1/1] Fix OPP not sending TransferCompleted signal

Commit 934b3b2f5f8432b67822be9f83a141fe3783cbd7 introduced a regression
in OPP, by making it not send TransferCompleted signal. This happened
because OPP was calling manager_emit_transfer_completed() on .reset(),
and manager_emit_transfer_completed() in turn checks if the os->object
is not NULL. This fixes this by moving clearing os->object after doing
service driver .reset().
---
src/obex.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/obex.c b/src/obex.c
index 59bbe7a..a0c17c1 100644
--- a/src/obex.c
+++ b/src/obex.c
@@ -288,8 +288,6 @@ static void os_reset_session(struct obex_session *os)
if (os->object) {
os->driver->set_io_watch(os->object, NULL, NULL);
os->driver->close(os->object);
- os->object = NULL;
- os->obj = NULL;
if (os->aborted && os->cmd == OBEX_CMD_PUT && os->path &&
os->driver->remove)
os->driver->remove(os->path);
@@ -315,6 +313,8 @@ static void os_reset_session(struct obex_session *os)
os->path = NULL;
}

+ os->object = NULL;
+ os->obj = NULL;
os->driver = NULL;
os->aborted = FALSE;
os->pending = 0;
--
1.7.4.1