[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r27579 - in Extractor: . src/main
From: |
gnunet |
Subject: |
[GNUnet-SVN] r27579 - in Extractor: . src/main |
Date: |
Tue, 25 Jun 2013 14:26:25 +0200 |
Author: grothoff
Date: 2013-06-25 14:26:25 +0200 (Tue, 25 Jun 2013)
New Revision: 27579
Modified:
Extractor/ChangeLog
Extractor/src/main/extractor.c
Extractor/src/main/extractor_ipc.c
Extractor/src/main/extractor_ipc_gnu.c
Log:
-fix IPC bug in le library
Modified: Extractor/ChangeLog
===================================================================
--- Extractor/ChangeLog 2013-06-25 12:26:14 UTC (rev 27578)
+++ Extractor/ChangeLog 2013-06-25 12:26:25 UTC (rev 27579)
@@ -1,3 +1,7 @@
+Tue Jun 25 14:24:00 CEST 2013
+ Fixing bug where LE could hang due to failure to process all
+ received data from the plugin. -CG
+
Sun Dec 2 08:31:17 CET 2012
Added Polish translation. -CG
Modified: Extractor/src/main/extractor.c
===================================================================
--- Extractor/src/main/extractor.c 2013-06-25 12:26:14 UTC (rev 27578)
+++ Extractor/src/main/extractor.c 2013-06-25 12:26:25 UTC (rev 27579)
@@ -177,6 +177,7 @@
value_len))
{
prp->file_finished = 1;
+ fprintf (stderr, "Sending ABRT\n");
send_discard_message (plugin);
return;
}
Modified: Extractor/src/main/extractor_ipc.c
===================================================================
--- Extractor/src/main/extractor_ipc.c 2013-06-25 12:26:14 UTC (rev 27578)
+++ Extractor/src/main/extractor_ipc.c 2013-06-25 12:26:25 UTC (rev 27579)
@@ -45,37 +45,46 @@
EXTRACTOR_ChannelMessageProcessor proc,
void *proc_cls)
{
- const char *cdata = data;
+ const char *cdata;
unsigned char code;
struct SeekRequestMessage seek;
struct MetaMessage meta;
const char *mime_type;
const char *value;
+ ssize_t ret;
+ ret = 0;
while (size > 0)
{
+ cdata = data;
code = (unsigned char) cdata[0];
switch (code)
{
case MESSAGE_DONE: /* Done */
plugin->seek_request = -1;
plugin->round_finished = 1;
- return 1;
+ ret++;
+ size--;
+ data++;
+ continue;
case MESSAGE_SEEK: /* Seek */
if (size < sizeof (struct SeekRequestMessage))
{
plugin->seek_request = -1;
- return 0;
+ return ret;
}
memcpy (&seek, cdata, sizeof (seek));
plugin->seek_request = (int64_t) seek.file_offset;
plugin->seek_whence = seek.whence;
- return sizeof (struct SeekRequestMessage);
+ ret += sizeof (struct SeekRequestMessage);
+ data += sizeof (struct SeekRequestMessage);
+ size -= sizeof (struct SeekRequestMessage);
+ continue;
case MESSAGE_META: /* Meta */
if (size < sizeof (struct MetaMessage))
{
plugin->seek_request = -1;
- return 0;
+ return ret;
}
memcpy (&meta, cdata, sizeof (meta));
/* check hdr for sanity */
@@ -87,7 +96,7 @@
if (size < sizeof (meta) + meta.mime_length + meta.value_size)
{
plugin->seek_request = -1;
- return 0;
+ return ret;
}
if (0 == meta.mime_length)
{
@@ -113,13 +122,16 @@
(enum EXTRACTOR_MetaType) meta.meta_type,
(enum EXTRACTOR_MetaFormat) meta.meta_format,
mime_type, value, meta.value_size);
- return sizeof (struct MetaMessage) + meta.mime_length +
meta.value_size;
+ ret += sizeof (struct MetaMessage) + meta.mime_length +
meta.value_size;
+ size -= sizeof (struct MetaMessage) + meta.mime_length +
meta.value_size;
+ data += sizeof (struct MetaMessage) + meta.mime_length +
meta.value_size;
+ continue;
default:
LOG ("Invalid message type %d\n", (int) code);
return -1;
}
}
- return 0;
+ return ret;
}
/* end of extractor_ipc.c */
Modified: Extractor/src/main/extractor_ipc_gnu.c
===================================================================
--- Extractor/src/main/extractor_ipc_gnu.c 2013-06-25 12:26:14 UTC (rev
27578)
+++ Extractor/src/main/extractor_ipc_gnu.c 2013-06-25 12:26:25 UTC (rev
27579)
@@ -465,7 +465,7 @@
}
tv.tv_sec = 0;
tv.tv_usec = 100000; /* 100 ms */
- if (-1 == select (max + 1, &to_check, NULL, NULL, &tv))
+ if (0 >= select (max + 1, &to_check, NULL, NULL, &tv))
{
/* an error or timeout -> something's wrong or all plugins hung up */
if (EINTR != errno)
@@ -517,10 +517,10 @@
}
else
{
+ channel->size = channel->size + iret - ret;
memmove (channel->mdata,
&channel->mdata[ret],
- channel->size + iret - ret);
- channel->size = channel->size + iret - ret;
+ channel->size);
}
}
return 1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r27579 - in Extractor: . src/main,
gnunet <=