Code Review
/
src
/
app-framework-binder.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
fix a memory leak
[src/app-framework-binder.git]
/
src
/
afb-websock.c
diff --git
a/src/afb-websock.c
b/src/afb-websock.c
index
dab4aa0
..
cff995f
100644
(file)
--- a/
src/afb-websock.c
+++ b/
src/afb-websock.c
@@
-27,10
+27,6
@@
#include <json.h>
#include <openssl/sha.h>
#include <json.h>
#include <openssl/sha.h>
-/*
-#include <openssl/bio.h>
-#include <openssl/evp.h>
-*/
#include "websock.h"
#include "websock.h"
@@
-220,15
+216,21
@@
static const struct afb_req_itf wsreq_itf = {
struct afb_websock *afb_websock_create(struct afb_hreq *hreq)
{
struct afb_websock *afb_websock_create(struct afb_hreq *hreq)
{
+ int fd;
struct afb_websock *result;
struct afb_websock *result;
+ fd = MHD_get_connection_info(hreq->connection,
+ MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd;
+ fd = dup(fd);
+ if (fd < 0)
+ return NULL;
+
result = malloc(sizeof * result);
if (result == NULL)
goto error;
result->connection = hreq->connection;
result = malloc(sizeof * result);
if (result == NULL)
goto error;
result->connection = hreq->connection;
- result->fd = MHD_get_connection_info(hreq->connection,
- MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd;
+ result->fd = fd;
result->context = ctxClientGet(afb_hreq_context(hreq));
if (result->context == NULL)
goto error2;
result->context = ctxClientGet(afb_hreq_context(hreq));
if (result->context == NULL)
goto error2;
@@
-255,6
+257,7
@@
error3:
error2:
free(result);
error:
error2:
free(result);
error:
+ close(fd);
return NULL;
}
return NULL;
}
@@
-346,7
+349,7
@@
static int aws_handle_json(struct afb_websock *aws, struct json_object *obj)
goto error;
verb = &api[lenapi+1];
for (lenverb = 0 ; verb[lenverb] && verb[lenverb] != '/' ; lenverb++);
goto error;
verb = &api[lenapi+1];
for (lenverb = 0 ; verb[lenverb] && verb[lenverb] != '/' ; lenverb++);
- if (!lenverb ||
!
verb[lenverb])
+ if (!lenverb || verb[lenverb])
goto error;
/* allocates the request data */
goto error;
/* allocates the request data */
@@
-502,6
+505,7
@@
static void wsreq_reply(struct afb_wsreq *wsreq, int retcode, const char *status
/* emits the reply */
message = json_object_to_json_string(reply);
websock_text(wsreq->aws->ws, message, strlen(message));
/* emits the reply */
message = json_object_to_json_string(reply);
websock_text(wsreq->aws->ws, message, strlen(message));
+ json_object_put(reply);
/* TODO eliminates the wsreq */
}
/* TODO eliminates the wsreq */
}