Hi, list.

Yury Mikhienko wrote:

I changed kannel source for dumping the next information:

in wapbox.log now:

2002-11-12 09:21:45 [1] DEBUG: WSP 227/4150: New method state REPLYING
2002-11-12 09:21:45 [1] DEBUG: WSP 227: New state CONNECTED
2002-11-12 09:21:45 [2] WARNING: WSP PDU with unknown type -1
2002-11-12 09:21:45 [2] WARNING: Incoming Octetstr has been dumped!!!
2002-11-12 09:21:45 [2] DEBUG: Octet string at 0x89a77c8:
2002-11-12 09:21:45 [2] DEBUG: len: 74
2002-11-12 09:21:45 [2] DEBUG: size: 76
2002-11-12 09:21:45 [2] DEBUG: immutable: 0
2002-11-12 09:21:45 [2] DEBUG: data: 73 5a 12 01 10 13 30 04 sZ....0.
2002-11-12 09:21:45 [2] DEBUG: data: 80 86 a0 00 04 81 92 a7 ........
2002-11-12 09:21:45 [2] DEBUG: data: 60 02 82 00 02 83 05 02 `.......
2002-11-12 09:21:45 [2] DEBUG: data: 84 01 80 80 83 99 81 ea ........
2002-11-12 09:21:45 [2] DEBUG: data: a9 4e 6f 6b 69 61 37 36 .Nokia76
2002-11-12 09:21:45 [2] DEBUG: data: 35 30 2f 31 2e 30 20 53 50/1.0 S
2002-11-12 09:21:45 [2] DEBUG: data: 79 6d 62 69 61 6e 4f 53 ymbianOS
2002-11-12 09:21:45 [2] DEBUG: data: 2f 36 2e 31 20 53 65 72 /6.1 Ser
2002-11-12 09:21:45 [2] DEBUG: data: 69 65 73 36 30 2f 30 2e ies60/0.
2002-11-12 09:21:45 [2] DEBUG: data: 39 00 9.
2002-11-12 09:21:45 [2] DEBUG: Octet string dump ends.
################################################################################
2002-11-12 09:21:45 [6] DEBUG: Thread 6 (gw/wap-appl.c:main_thread) terminates.
################################################################################

How can I solve this? May be I shall apply another SAR patch (which one?)?
Or this problen can be solved another way?

Now I solved the problem with dirty hack the gwthread-pthread.c:
in:
static void *new_thread(void *arg)
{
int ret;
struct new_thread_args *p = arg;
....
(p->func)(p->arg);

/* Changed by me */
do
{
lock();

debug("gwlib.gwthread", 0, "Thread %ld (%s) terminates. ",
p->ti->number, p->ti->name);
debug("gwlib.gwthread", 0, "Try up Thread %ld (%s). ",
p->ti->number, p->ti->name);
unlock();
ret = pthread_setspecific(tsd_key, p->ti);
if (ret != 0) {
panic(ret, "gwthread-pthread: pthread_setspecific failed");
}
(p->func)(p->arg);
}while(p->ti->number==6 && !strcmp(p->ti->name,"gw/wap-appl.c:main_thread"));
//******************************
....
};

It works, but it is not a good way :((

Thanx.



Seems that there is bug in wsp_unit.c

static void main_thread(void *arg) {
        WAPEvent *e;
        WAPEvent *newevent;

        while (run_status == running && (e = list_consume(queue)) != NULL) {
                wap_event_assert(e);
                switch (e->type) {
                case T_DUnitdata_Ind:
                        newevent = unpack_datagram(e);
/* MUST BE INSERTED  if (newevent != NULL) */
	                	dispatch_to_appl(newevent);

unpack_datagram returns NULL
(> 2002-11-12 09:21:45 [2] WARNING: WSP PDU with unknown type -1)
and dispatch NULL to wap-appl.c

So later in wap-appl.c we have (main_thread):
while (run_status == running && (ind = list_consume(queue)) != NULL) {
}

and list_consume breaks the loop and

> 2002-11-12 09:21:45 [6] DEBUG: Thread 6 (gw/wap-appl.c:main_thread) terminates.

So any following requests will not be processed.

I think we must insert check for NULL (see above, line /* MUST BE INSERTED)

--
Vjacheslav Chekushin                                mailto:[EMAIL PROTECTED]
Latvian Mobile Phone Company                        http://www.lmt.lv


Reply via email to