Skip to content

Commit 0cca527

Browse files
authored
Merge pull request #15 from Jordymalone/fix-error-handling
Improve HTTP server error handling and cleanup
2 parents 313f8ea + c030df2 commit 0cca527

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

http_server.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,16 @@ static int http_server_worker(void *arg)
160160
};
161161
struct http_request request;
162162
struct socket *socket = (struct socket *) arg;
163+
int err = 0;
163164

164165
allow_signal(SIGKILL);
165166
allow_signal(SIGTERM);
166167

167168
buf = kzalloc(RECV_BUFFER_SIZE, GFP_KERNEL);
168169
if (!buf) {
169170
pr_err("can't allocate memory!\n");
170-
return -1;
171+
err = -ENOMEM;
172+
goto out;
171173
}
172174

173175
request.socket = socket;
@@ -176,19 +178,23 @@ static int http_server_worker(void *arg)
176178
while (!kthread_should_stop()) {
177179
int ret = http_server_recv(socket, buf, RECV_BUFFER_SIZE - 1);
178180
if (ret <= 0) {
179-
if (ret)
181+
if (ret) {
180182
pr_err("recv error: %d\n", ret);
181-
break;
183+
err = ret;
184+
}
185+
goto out_free_buf;
182186
}
183187
http_parser_execute(&parser, &setting, buf, ret);
184188
if (request.complete && !http_should_keep_alive(&parser))
185-
break;
189+
goto out_free_buf;
186190
memset(buf, 0, RECV_BUFFER_SIZE);
187191
}
192+
out_free_buf:
193+
kfree(buf);
194+
out:
188195
kernel_sock_shutdown(socket, SHUT_RDWR);
189196
sock_release(socket);
190-
kfree(buf);
191-
return 0;
197+
return err;
192198
}
193199

194200
int http_server_daemon(void *arg)
@@ -211,6 +217,7 @@ int http_server_daemon(void *arg)
211217
worker = kthread_run(http_server_worker, socket, KBUILD_MODNAME);
212218
if (IS_ERR(worker)) {
213219
pr_err("can't create more worker process\n");
220+
sock_release(socket);
214221
continue;
215222
}
216223
}

0 commit comments

Comments
 (0)