|
20 | 20 |
|
21 | 21 | ZEND_EXTERN_MODULE_GLOBALS(cassandra) |
22 | 22 |
|
| 23 | +static CassUuidGen* get_uuid_gen() { |
| 24 | + /* Create a new uuid generator if our PID has changed. This prevents the same |
| 25 | + * UUIDs from being generated in forked processes. |
| 26 | + */ |
| 27 | + if (CASSANDRA_G(uuid_gen_pid) != getpid()) { |
| 28 | + if (CASSANDRA_G(uuid_gen)) { |
| 29 | + cass_uuid_gen_free(CASSANDRA_G(uuid_gen)); |
| 30 | + } |
| 31 | + CASSANDRA_G(uuid_gen) = cass_uuid_gen_new(); |
| 32 | + CASSANDRA_G(uuid_gen_pid) = getpid(); |
| 33 | + } |
| 34 | + return CASSANDRA_G(uuid_gen); |
| 35 | +} |
| 36 | + |
23 | 37 | void |
24 | 38 | php_cassandra_uuid_generate_random(CassUuid *out TSRMLS_DC) |
25 | 39 | { |
26 | | - cass_uuid_gen_random(CASSANDRA_G(uuid_gen), out); |
| 40 | + CassUuidGen* uuid_gen = get_uuid_gen(); |
| 41 | + if (!uuid_gen) return; |
| 42 | + cass_uuid_gen_random(uuid_gen, out); |
27 | 43 | } |
28 | 44 |
|
29 | 45 | void |
30 | 46 | php_cassandra_uuid_generate_time(CassUuid *out TSRMLS_DC) |
31 | 47 | { |
32 | | - cass_uuid_gen_time(CASSANDRA_G(uuid_gen), out); |
| 48 | + CassUuidGen* uuid_gen = get_uuid_gen(); |
| 49 | + if (!uuid_gen) return; |
| 50 | + cass_uuid_gen_time(uuid_gen, out); |
33 | 51 | } |
34 | 52 |
|
35 | 53 | void |
36 | 54 | php_cassandra_uuid_generate_from_time(long timestamp, CassUuid *out TSRMLS_DC) |
37 | 55 | { |
38 | | - cass_uuid_gen_from_time(CASSANDRA_G(uuid_gen), (cass_uint64_t) timestamp, out); |
| 56 | + CassUuidGen* uuid_gen = get_uuid_gen(); |
| 57 | + if (!uuid_gen) return; |
| 58 | + cass_uuid_gen_from_time(uuid_gen, (cass_uint64_t) timestamp, out); |
39 | 59 | } |
0 commit comments