diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-03-11 12:21:47 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-03-11 12:21:47 +0000 |
commit | f6261b035e3d67813f7528bafdcc7c69f2e19300 (patch) | |
tree | c2a807305005dc3442763f685fc5825a1b09850c /src/fs/gnunet-search.c | |
parent | 49da466bce647497cfc034db9e9761804e9d1a36 (diff) | |
download | gnunet-f6261b035e3d67813f7528bafdcc7c69f2e19300.tar.gz gnunet-f6261b035e3d67813f7528bafdcc7c69f2e19300.zip |
s
Diffstat (limited to 'src/fs/gnunet-search.c')
-rw-r--r-- | src/fs/gnunet-search.c | 38 |
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 | ||
36 | static const struct GNUNET_CONFIGURATION_Handle *cfg; | 36 | static const struct GNUNET_CONFIGURATION_Handle *cfg; |
37 | 37 | ||
38 | static struct GNUNET_SCHEDULER_Handle *sched; | ||
39 | |||
38 | static struct GNUNET_FS_Handle *ctx; | 40 | static struct GNUNET_FS_Handle *ctx; |
39 | 41 | ||
40 | static struct GNUNET_FS_SearchContext *sc; | 42 | static 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 | ||
67 | static void | ||
68 | clean_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 | ||
151 | static void | ||
152 | shutdown_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 | */ |
146 | static void | 172 | static void |
147 | run (void *cls, | 173 | run (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 | ||