function.cc 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* Gearman server and library
  2. * Copyright (C) 2008 Brian Aker, Eric Day
  3. * All rights reserved.
  4. *
  5. * Use and distribution licensed under the BSD license. See
  6. * the COPYING file in the parent directory for full text.
  7. */
  8. /**
  9. * @file
  10. * @brief Server function definitions
  11. */
  12. #include <libgearman-server/common.h>
  13. #include <string.h>
  14. #include <libgearman-server/list.h>
  15. /*
  16. * Public definitions
  17. */
  18. static gearman_server_function_st * gearman_server_function_create(gearman_server_st *server);
  19. #ifndef __INTEL_COMPILER
  20. #pragma GCC diagnostic ignored "-Wold-style-cast"
  21. #endif
  22. gearman_server_function_st *
  23. gearman_server_function_get(gearman_server_st *server,
  24. const char *function_name,
  25. size_t function_name_size)
  26. {
  27. gearman_server_function_st *function;
  28. for (function= server->function_list; function != NULL;
  29. function= function->next)
  30. {
  31. if (function->function_name_size == function_name_size &&
  32. !memcmp(function->function_name, function_name, function_name_size))
  33. {
  34. return function;
  35. }
  36. }
  37. function= gearman_server_function_create(server);
  38. if (not function)
  39. return NULL;
  40. function->function_name= (char *)malloc(function_name_size +1);
  41. if (not function->function_name)
  42. {
  43. gearmand_merror("malloc", char, function_name_size +1);
  44. gearman_server_function_free(server, function);
  45. return NULL;
  46. }
  47. memcpy(function->function_name, function_name, function_name_size);
  48. function->function_name[function_name_size]= 0;
  49. function->function_name_size= function_name_size;
  50. return function;
  51. }
  52. static gearman_server_function_st * gearman_server_function_create(gearman_server_st *server)
  53. {
  54. gearman_server_function_st *function;
  55. function= (gearman_server_function_st *)malloc(sizeof(gearman_server_function_st));
  56. if (function == NULL)
  57. {
  58. gearmand_merror("malloc", gearman_server_function_st, 0);
  59. return NULL;
  60. }
  61. function->worker_count= 0;
  62. function->job_count= 0;
  63. function->job_total= 0;
  64. function->job_running= 0;
  65. function->max_queue_size= GEARMAN_DEFAULT_MAX_QUEUE_SIZE;
  66. function->function_name_size= 0;
  67. gearmand_server_list_add(server, function);
  68. function->function_name= NULL;
  69. function->worker_list= NULL;
  70. memset(function->job_list, 0,
  71. sizeof(gearman_server_job_st *) * GEARMAND_JOB_PRIORITY_MAX);
  72. memset(function->job_end, 0,
  73. sizeof(gearman_server_job_st *) * GEARMAND_JOB_PRIORITY_MAX);
  74. return function;
  75. }
  76. void gearman_server_function_free(gearman_server_st *server, gearman_server_function_st *function)
  77. {
  78. if (function->function_name != NULL)
  79. {
  80. gearmand_debug("free");
  81. free(function->function_name);
  82. }
  83. gearmand_server_list_free(server, function);
  84. gearmand_debug("free");
  85. free(function);
  86. }