aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-search.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-03-11 12:21:47 +0000
committerChristian Grothoff <christian@grothoff.org>2010-03-11 12:21:47 +0000
commitf6261b035e3d67813f7528bafdcc7c69f2e19300 (patch)
treec2a807305005dc3442763f685fc5825a1b09850c /src/fs/gnunet-search.c
parent49da466bce647497cfc034db9e9761804e9d1a36 (diff)
downloadgnunet-f6261b035e3d67813f7528bafdcc7c69f2e19300.tar.gz
gnunet-f6261b035e3d67813f7528bafdcc7c69f2e19300.zip
s
Diffstat (limited to 'src/fs/gnunet-search.c')
-rw-r--r--src/fs/gnunet-search.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/fs/gnunet-search.c b/src/fs/gnunet-search.c
index 4836f9d83..6bb599455 100644
--- a/src/fs/gnunet-search.c
+++ b/src/fs/gnunet-search.c
@@ -35,6 +35,8 @@ static int ret;
35 35
36static const struct GNUNET_CONFIGURATION_Handle *cfg; 36static const struct GNUNET_CONFIGURATION_Handle *cfg;
37 37
38static struct GNUNET_SCHEDULER_Handle *sched;
39
38static struct GNUNET_FS_Handle *ctx; 40static struct GNUNET_FS_Handle *ctx;
39 41
40static struct GNUNET_FS_SearchContext *sc; 42static struct GNUNET_FS_SearchContext *sc;
@@ -62,6 +64,14 @@ item_printer (void *cls,
62 return GNUNET_OK; 64 return GNUNET_OK;
63} 65}
64 66
67static void
68clean_task (void *cls,
69 const struct GNUNET_SCHEDULER_TaskContext *tc)
70{
71 GNUNET_FS_stop (ctx);
72 ctx = NULL;
73}
74
65 75
66/** 76/**
67 * Called by FS client to give information about the progress of an 77 * Called by FS client to give information about the progress of an
@@ -119,10 +129,14 @@ progress_cb (void *cls,
119 fprintf (stderr, 129 fprintf (stderr,
120 _("Error searching: %s.\n"), 130 _("Error searching: %s.\n"),
121 info->value.search.specifics.error.message); 131 info->value.search.specifics.error.message);
122 GNUNET_FS_search_stop (sc); 132 GNUNET_SCHEDULER_shutdown (sched);
123 break; 133 break;
124 case GNUNET_FS_STATUS_SEARCH_STOPPED: 134 case GNUNET_FS_STATUS_SEARCH_STOPPED:
125 GNUNET_FS_stop (ctx); 135 sc = NULL;
136 GNUNET_SCHEDULER_add_continuation (sched,
137 &clean_task,
138 NULL,
139 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
126 break; 140 break;
127 default: 141 default:
128 fprintf (stderr, 142 fprintf (stderr,
@@ -134,6 +148,18 @@ progress_cb (void *cls,
134} 148}
135 149
136 150
151static void
152shutdown_task (void *cls,
153 const struct GNUNET_SCHEDULER_TaskContext *tc)
154{
155 if (sc != NULL)
156 {
157 GNUNET_FS_search_stop (sc);
158 sc = NULL;
159 }
160}
161
162
137/** 163/**
138 * Main function that will be run by the scheduler. 164 * Main function that will be run by the scheduler.
139 * 165 *
@@ -145,7 +171,7 @@ progress_cb (void *cls,
145 */ 171 */
146static void 172static void
147run (void *cls, 173run (void *cls,
148 struct GNUNET_SCHEDULER_Handle *sched, 174 struct GNUNET_SCHEDULER_Handle *s,
149 char *const *args, 175 char *const *args,
150 const char *cfgfile, 176 const char *cfgfile,
151 const struct GNUNET_CONFIGURATION_Handle *c) 177 const struct GNUNET_CONFIGURATION_Handle *c)
@@ -153,6 +179,7 @@ run (void *cls,
153 struct GNUNET_FS_Uri *uri; 179 struct GNUNET_FS_Uri *uri;
154 unsigned int argc; 180 unsigned int argc;
155 181
182 sched = s;
156 argc = 0; 183 argc = 0;
157 while (NULL != args[argc]) 184 while (NULL != args[argc])
158 argc++; 185 argc++;
@@ -193,9 +220,14 @@ run (void *cls,
193 { 220 {
194 fprintf (stderr, 221 fprintf (stderr,
195 _("Could not start searching.\n")); 222 _("Could not start searching.\n"));
223 GNUNET_FS_stop (ctx);
196 ret = 1; 224 ret = 1;
197 return; 225 return;
198 } 226 }
227 GNUNET_SCHEDULER_add_delayed (sched,
228 GNUNET_TIME_UNIT_FOREVER_REL,
229 &shutdown_task,
230 NULL);
199} 231}
200 232
201 233