Skip to content

Commit

Permalink
fixed crash when imagemagick used by concurrent requests.
Browse files Browse the repository at this point in the history
  • Loading branch information
buaazp committed Nov 23, 2013
1 parent e5406df commit 5c1940c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
61 changes: 37 additions & 24 deletions main.c
Expand Up @@ -19,6 +19,7 @@
*/

#include <evhtp.h>
#include <wand/MagickWand.h>
#include <inttypes.h>
#include <unistd.h>
#include <signal.h>
Expand Down Expand Up @@ -49,7 +50,7 @@ static void settings_init(void)
settings.backlog = 1024;
settings.num_threads = 4; /* N workers */
settings.log = false;
settings.cache_on = true;
settings.cache_on = false;
strcpy(settings.cache_ip, "127.0.0.1");
settings.cache_port = 11211;
settings.max_keepalives = 1;
Expand Down Expand Up @@ -97,6 +98,7 @@ int main(int argc, char **argv)
"p:"
"t:"
"l"
"c"
"M:"
"m:"
"b:"
Expand Down Expand Up @@ -129,6 +131,9 @@ int main(int argc, char **argv)
case 'l':
settings.log = true;
break;
case 'c':
settings.cache_on = true;
break;
case 'M':
strcpy(settings.cache_ip, optarg);
break;
Expand All @@ -142,7 +147,7 @@ int main(int argc, char **argv)
settings.max_keepalives = atoll(optarg);
break;
case 'h':
printf("Usage: ./zimg -p port -t thread_num -M memcached_ip -m memcached_port -l[og] -b backlog_num -k max_keepalives -h[elp]\n");
printf("Usage: ./zimg -p port -t thread_num -M memcached_ip -m memcached_port -l[og] -c[ache] -b backlog_num -k max_keepalives -h[elp]\n");
exit(1);
default:
fprintf(stderr, "Illegal argument \"%c\"\n", c);
Expand Down Expand Up @@ -188,31 +193,38 @@ int main(int argc, char **argv)


//init memcached connection...
LOG_PRINT(LOG_INFO, "Begin to Init Memcached Connection...");
memcached_st *memc;
memc= memcached_create(NULL);

char mserver[32];
sprintf(mserver, "%s:%d", settings.cache_ip, settings.cache_port);
memcached_server_st *servers = memcached_servers_parse(mserver);

memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 0);
//使用NO-BLOCK,防止memcache倒掉时挂死
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 1);
LOG_PRINT(LOG_INFO, "Memcached Connection Init Finished.");
if(set_cache("zimg", "1") == -1)
if(settings.cache_on == true)
{
LOG_PRINT(LOG_WARNING, "Memcached[%s] Connect Failed!", mserver);
settings.cache_on = false;
LOG_PRINT(LOG_INFO, "Begin to Init Memcached Connection...");
memcached_st *memc;
memc= memcached_create(NULL);

char mserver[32];
sprintf(mserver, "%s:%d", settings.cache_ip, settings.cache_port);
memcached_server_st *servers = memcached_servers_parse(mserver);

memcached_server_push(memc, servers);
memcached_server_list_free(servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 0);
//使用NO-BLOCK,防止memcache倒掉时挂死
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 1);
LOG_PRINT(LOG_INFO, "Memcached Connection Init Finished.");
if(set_cache("zimg", "1") == -1)
{
LOG_PRINT(LOG_WARNING, "Memcached[%s] Connect Failed!", mserver);
settings.cache_on = false;
}
else
{
LOG_PRINT(LOG_INFO, "memcached connection to: %s", mserver);
settings.cache_on = true;
}
memcached_free(memc);
}
else
{
LOG_PRINT(LOG_INFO, "memcached connection to: %s", mserver);
settings.cache_on = true;
}
memcached_free(memc);
LOG_PRINT(LOG_INFO, "Don't use memcached as cache.");
//init magickwand
MagickWandGenesis();

//begin to start httpd...
LOG_PRINT(LOG_INFO, "Begin to Start Httpd Server...");
Expand All @@ -234,6 +246,7 @@ int main(int argc, char **argv)
evhtp_unbind_socket(htp);
evhtp_free(htp);
event_base_free(evbase);
MagickWandTerminus();

fprintf(stdout, "\nByebye!\n");
return 0;
Expand Down
2 changes: 1 addition & 1 deletion zhttpd.c
Expand Up @@ -313,7 +313,7 @@ void post_request_cb(evhtp_request_t *req, void *arg)
{
if((end = kmp(buff+start, post_size-start, blankPattern, strlen(blankPattern))) == -1)
{
LOG_PRINT(LOG_ERROR, "quote \" Not Found!");
LOG_PRINT(LOG_ERROR, "quote \\r\\n Not Found!");
goto err;
}
}
Expand Down
2 changes: 0 additions & 2 deletions zimg.c
Expand Up @@ -276,7 +276,6 @@ int get_img(zimg_req_t *req, char **buff_ptr, size_t *img_size)
if((fd = open(rsp_path, O_RDONLY)) == -1)
//if(status == MagickFalse)
{
MagickWandGenesis();
magick_wand = NewMagickWand();
got_rsp = false;

Expand Down Expand Up @@ -543,7 +542,6 @@ int get_img(zimg_req_t *req, char **buff_ptr, size_t *img_size)
if(magick_wand)
{
magick_wand=DestroyMagickWand(magick_wand);
MagickWandTerminus();
}
if(img_format)
free(img_format);
Expand Down

0 comments on commit 5c1940c

Please sign in to comment.