function.cc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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 <config.h>
  13. #include <libgearman-server/common.h>
  14. #include <cstring>
  15. #include <libgearman-server/list.h>
  16. /*
  17. * Public definitions
  18. */
  19. static gearman_server_function_st * gearman_server_function_create(gearman_server_st *server);
  20. #ifndef __INTEL_COMPILER
  21. #pragma GCC diagnostic ignored "-Wold-style-cast"
  22. #endif
  23. gearman_server_function_st *
  24. gearman_server_function_get(gearman_server_st *server,
  25. const char *function_name,
  26. size_t function_name_size)
  27. {
  28. gearman_server_function_st *function;
  29. for (function= server->function_list; function != NULL;
  30. function= function->next)
  31. {
  32. if (function->function_name_size == function_name_size &&
  33. !memcmp(function->function_name, function_name, function_name_size))
  34. {
  35. return function;
  36. }
  37. }
  38. function= gearman_server_function_create(server);
  39. if (not function)
  40. return NULL;
  41. function->function_name= (char *)malloc(function_name_size +1);
  42. if (not function->function_name)
  43. {
  44. gearmand_merror("malloc", char, function_name_size +1);
  45. gearman_server_function_free(server, function);
  46. return NULL;
  47. }
  48. memcpy(function->function_name, function_name, function_name_size);
  49. function->function_name[function_name_size]= 0;
  50. function->function_name_size= function_name_size;
  51. return function;
  52. }
  53. static gearman_server_function_st * gearman_server_function_create(gearman_server_st *server)
  54. {
  55. gearman_server_function_st *function;
  56. function= (gearman_server_function_st *)malloc(sizeof(gearman_server_function_st));
  57. if (function == NULL)
  58. {
  59. gearmand_merror("malloc", gearman_server_function_st, 0);
  60. return NULL;
  61. }
  62. function->worker_count= 0;
  63. function->job_count= 0;
  64. function->job_total= 0;
  65. function->job_running= 0;
  66. memset(function->max_queue_size, GEARMAN_DEFAULT_MAX_QUEUE_SIZE,
  67. sizeof(uint32_t) * GEARMAND_JOB_PRIORITY_MAX);
  68. function->function_name_size= 0;
  69. gearmand_server_list_add(server, function);
  70. function->function_name= NULL;
  71. function->worker_list= NULL;
  72. memset(function->job_list, 0,
  73. sizeof(gearman_server_job_st *) * GEARMAND_JOB_PRIORITY_MAX);
  74. memset(function->job_end, 0,
  75. sizeof(gearman_server_job_st *) * GEARMAND_JOB_PRIORITY_MAX);
  76. return function;
  77. }
  78. void gearman_server_function_free(gearman_server_st *server, gearman_server_function_st *function)
  79. {
  80. if (function->function_name != NULL)
  81. {
  82. gearmand_debug("free");
  83. free(function->function_name);
  84. }
  85. gearmand_server_list_free(server, function);
  86. gearmand_debug("free");
  87. free(function);
  88. }