You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

snowdrift.c 8.2 kB

4 years ago
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
!14 修复WorkerId类型问题,添加多实例控制 * changed WorkerId from uint8_t to uint16_t * Merge branch 'master' of https://gitee.com/laoyaosu/idgenerator * use C89 style and fix perror invalid * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 代码优化,注释掉不用的代码 * 增加版权信息 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 1.php extension add more check * update readme * fix min_seqnumber default value * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fmt v code * update php&vlang readme file * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 更严格的默认配置 * fix worker max num * changed property num named wid_num * Merge branch 'master' of https://gitee.com/yitter/idgenerator * 修复MaxSeqNumber判断 * Merge branch 'master' of https://gitee.com/yitter/idgenerator * fix init return * Merge branch 'master' of https://gitee.com/yitter/idgenerator * add README.md * always lock * fix shared memory addr * use share memory * fix malloc * add make file * add php ext * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * Merge branch 'master' of https://gitee.com/yitter/idgenerator * use lock and bit operation
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /*
  2. +----------------------------------------------------------------------+
  3. | snowdrift |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-2018 The PHP Group |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 3.01 of the PHP license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.php.net/license/3_01.txt |
  11. | If you did not receive a copy of the PHP license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@php.net so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | 版权归属: yitter(yitter@126.com) |
  16. | Author: amuluowin(63851587@qq.com) |
  17. +----------------------------------------------------------------------+
  18. */
  19. /* $Id$ */
  20. #ifdef HAVE_CONFIG_H
  21. #include "config.h"
  22. #endif
  23. #include "php.h"
  24. #include "php_ini.h"
  25. #include "zend_exceptions.h"
  26. #include "ext/standard/info.h"
  27. #include "src/snowflake/shm.h"
  28. #include "php_snowdrift.h"
  29. #include "src/snowflake/snowflake.h"
  30. /* True global resources - no need for thread safety here */
  31. static struct shm shmctx;
  32. static snowflake *sf;
  33. zend_class_entry snowdrift_ce;
  34. static uint16_t wid_num = 0;
  35. /* {{{ PHP_INI */
  36. PHP_INI_BEGIN()
  37. STD_PHP_INI_ENTRY("snowdrift.Method", "1", PHP_INI_SYSTEM, OnUpdateLongGEZero, Method, zend_snowdrift_globals, snowdrift_globals)
  38. STD_PHP_INI_ENTRY("snowdrift.BaseTime", "1582136402000", PHP_INI_SYSTEM, OnUpdateLongGEZero, BaseTime, zend_snowdrift_globals, snowdrift_globals)
  39. STD_PHP_INI_ENTRY("snowdrift.WorkerId", "1", PHP_INI_SYSTEM, OnUpdateLongGEZero, WorkerId, zend_snowdrift_globals, snowdrift_globals)
  40. STD_PHP_INI_ENTRY("snowdrift.WorkerIdBitLength", "6", PHP_INI_SYSTEM, OnUpdateLongGEZero, WorkerIdBitLength, zend_snowdrift_globals, snowdrift_globals)
  41. STD_PHP_INI_ENTRY("snowdrift.SeqBitLength", "6", PHP_INI_SYSTEM, OnUpdateLongGEZero, SeqBitLength, zend_snowdrift_globals, snowdrift_globals)
  42. STD_PHP_INI_ENTRY("snowdrift.MaxSeqNumber", "0", PHP_INI_SYSTEM, OnUpdateLongGEZero, MaxSeqNumber, zend_snowdrift_globals, snowdrift_globals)
  43. STD_PHP_INI_ENTRY("snowdrift.MinSeqNumber", "5", PHP_INI_SYSTEM, OnUpdateLongGEZero, MinSeqNumber, zend_snowdrift_globals, snowdrift_globals)
  44. STD_PHP_INI_ENTRY("snowdrift.TopOverCostCount", "2000", PHP_INI_SYSTEM, OnUpdateLongGEZero, TopOverCostCount, zend_snowdrift_globals, snowdrift_globals)
  45. STD_PHP_INI_ENTRY("snowdrift.Multi", "0", PHP_INI_SYSTEM, OnUpdateLongGEZero, Multi, zend_snowdrift_globals, snowdrift_globals)
  46. PHP_INI_END()
  47. /* }}} */
  48. static int snowdrift_init()
  49. {
  50. if (SD_G(MaxSeqNumber) != 0 && SD_G(MaxSeqNumber) < SD_G(MinSeqNumber))
  51. {
  52. return FAILURE;
  53. }
  54. wid_num = (-1L << SD_G(WorkerIdBitLength)) ^ -1L;
  55. if (SD_G(Multi) > 0)
  56. {
  57. shmctx.size = wid_num * sizeof(snowflake);
  58. if (shm_alloc(&shmctx) == -1)
  59. {
  60. return FAILURE;
  61. }
  62. sf = (snowflake *)shmctx.addr;
  63. int i;
  64. for (i = 0; i < wid_num; i++)
  65. {
  66. snowflake *tmp = (sf + i);
  67. tmp->Method = SD_G(Method);
  68. tmp->BaseTime = SD_G(BaseTime);
  69. tmp->WorkerId = i + 1;
  70. tmp->WorkerIdBitLength = SD_G(WorkerIdBitLength);
  71. tmp->SeqBitLength = SD_G(SeqBitLength);
  72. tmp->MaxSeqNumber = SD_G(MaxSeqNumber);
  73. tmp->MinSeqNumber = SD_G(MinSeqNumber);
  74. tmp->TopOverCostCount = SD_G(TopOverCostCount);
  75. Config(tmp);
  76. }
  77. }
  78. else
  79. {
  80. shmctx.size = sizeof(snowflake);
  81. if (shm_alloc(&shmctx) == -1)
  82. {
  83. return FAILURE;
  84. }
  85. sf = (snowflake *)shmctx.addr;
  86. sf->Method = SD_G(Method);
  87. sf->BaseTime = SD_G(BaseTime);
  88. sf->WorkerId = SD_G(WorkerId);
  89. sf->WorkerIdBitLength = SD_G(WorkerIdBitLength);
  90. sf->SeqBitLength = SD_G(SeqBitLength);
  91. sf->MaxSeqNumber = SD_G(MaxSeqNumber);
  92. sf->MinSeqNumber = SD_G(MinSeqNumber);
  93. sf->TopOverCostCount = SD_G(TopOverCostCount);
  94. Config(sf);
  95. }
  96. return SUCCESS;
  97. }
  98. PHP_METHOD(snowdrift, NextId)
  99. {
  100. zend_long wid = SD_G(WorkerId);
  101. if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &wid) == FAILURE)
  102. {
  103. RETURN_FALSE;
  104. }
  105. snowflake *flake;
  106. if (SD_G(Multi) == 0)
  107. {
  108. flake = sf;
  109. }
  110. else
  111. {
  112. wid--;
  113. if (wid < 0 || wid > wid_num)
  114. {
  115. zend_throw_exception_ex(NULL, 0, "wid error! wid between 1 and %d", wid_num);
  116. RETURN_NULL();
  117. }
  118. flake = (sf + wid);
  119. }
  120. RETURN_LONG(NextId(flake));
  121. }
  122. PHP_METHOD(snowdrift, NextNumId)
  123. {
  124. zend_long num = 1;
  125. zend_long wid = SD_G(WorkerId);
  126. if (zend_parse_parameters(ZEND_NUM_ARGS(), "|ll", &num, &wid) == FAILURE)
  127. {
  128. RETURN_FALSE;
  129. }
  130. snowflake *flake;
  131. if (SD_G(Multi) == 0)
  132. {
  133. flake = sf;
  134. }
  135. else
  136. {
  137. wid--;
  138. if (wid < 0 || wid > wid_num)
  139. {
  140. zend_throw_exception_ex(NULL, 0, "wid error! wid between 1 and %d", wid_num);
  141. RETURN_NULL();
  142. }
  143. flake = (sf + wid);
  144. }
  145. array_init(return_value);
  146. int i;
  147. for (i = 0; i < num; i++)
  148. {
  149. add_next_index_long(return_value, NextId(flake));
  150. }
  151. }
  152. /* {{{ PHP_MSHUTDOWN_FUNCTION
  153. */
  154. PHP_MSHUTDOWN_FUNCTION(snowdrift)
  155. {
  156. UNREGISTER_INI_ENTRIES();
  157. shm_free(&shmctx);
  158. return SUCCESS;
  159. }
  160. /* }}} */
  161. /* Remove if there's nothing to do at request start */
  162. /* {{{ PHP_RINIT_FUNCTION
  163. */
  164. PHP_RINIT_FUNCTION(snowdrift)
  165. {
  166. #if defined(COMPILE_DL_SNOWFLAKE) && defined(ZTS)
  167. ZEND_TSRMLS_CACHE_UPDATE();
  168. #endif
  169. return SUCCESS;
  170. }
  171. /* }}} */
  172. /* Remove if there's nothing to do at request end */
  173. /* {{{ PHP_RSHUTDOWN_FUNCTION
  174. */
  175. PHP_RSHUTDOWN_FUNCTION(snowdrift)
  176. {
  177. return SUCCESS;
  178. }
  179. /* }}} */
  180. /* {{{ PHP_MINFO_FUNCTION
  181. */
  182. PHP_MINFO_FUNCTION(snowdrift)
  183. {
  184. php_info_print_table_start();
  185. php_info_print_table_header(2, "snowfrift support", "enabled");
  186. php_info_print_table_row(2, "Version", PHP_SNOWDRIFT_VERSION);
  187. php_info_print_table_end();
  188. /* Remove comments if you have entries in php.ini */
  189. DISPLAY_INI_ENTRIES();
  190. }
  191. /* }}} */
  192. /* {{{ arginfo
  193. */
  194. ZEND_BEGIN_ARG_INFO(arginfo_snowdrift_void, 0)
  195. ZEND_END_ARG_INFO()
  196. ZEND_BEGIN_ARG_INFO_EX(arginfo_snowdrift_nextid, 0, 0, 1)
  197. ZEND_ARG_INFO(0, wid)
  198. ZEND_END_ARG_INFO()
  199. ZEND_BEGIN_ARG_INFO_EX(arginfo_snowdrift_nextnumid, 0, 0, 1)
  200. ZEND_ARG_INFO(0, num)
  201. ZEND_ARG_INFO(0, wid)
  202. ZEND_END_ARG_INFO()
  203. /* }}} */
  204. /* {{{ snowdrift_functions[]
  205. *
  206. * Every user visible function must have an entry in snowdrift_functions[].
  207. */
  208. const zend_function_entry snowdrift_functions[] = {
  209. PHP_FE_END /* Must be the last line in snowdrift_functions[] */
  210. };
  211. /* }}} */
  212. /* {{{ snowdrift_method[]
  213. *
  214. * Every user visible function must have an entry in snowdrift_functions[].
  215. */
  216. static const zend_function_entry snowdrift_methods[] = {
  217. PHP_ME(snowdrift, NextId, arginfo_snowdrift_nextid, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
  218. PHP_ME(snowdrift, NextNumId, arginfo_snowdrift_nextnumid, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC) PHP_FE_END};
  219. /* }}} */
  220. /* {{{ PHP_MINIT_FUNCTION
  221. */
  222. PHP_MINIT_FUNCTION(snowdrift)
  223. {
  224. INIT_CLASS_ENTRY(snowdrift_ce, "snowdrift", snowdrift_methods);
  225. REGISTER_INI_ENTRIES();
  226. zend_register_internal_class(&snowdrift_ce);
  227. if (snowdrift_init() == FAILURE)
  228. {
  229. return FAILURE;
  230. }
  231. return SUCCESS;
  232. }
  233. /* }}} */
  234. /* {{{ snowdrift_module_entry
  235. */
  236. zend_module_entry snowdrift_module_entry = {
  237. STANDARD_MODULE_HEADER,
  238. "snowdrift",
  239. snowdrift_functions,
  240. PHP_MINIT(snowdrift),
  241. PHP_MSHUTDOWN(snowdrift),
  242. PHP_RINIT(snowdrift), /* Replace with NULL if there's nothing to do at
  243. request start */
  244. PHP_RSHUTDOWN(snowdrift), /* Replace with NULL if there's nothing to do at
  245. request end */
  246. PHP_MINFO(snowdrift),
  247. PHP_SNOWDRIFT_VERSION,
  248. STANDARD_MODULE_PROPERTIES};
  249. /* }}} */
  250. #ifdef COMPILE_DL_SNOWDRIFT
  251. #ifdef ZTS
  252. ZEND_TSRMLS_CACHE_DEFINE()
  253. #endif
  254. ZEND_GET_MODULE(snowdrift)
  255. #endif