@@ -51,6 +51,7 @@ static ngx_inline ngx_shm_zone_t *ngx_http_lua_shdict_get_zone(lua_State *L,
51
51
#define NGX_HTTP_LUA_SHDICT_ADD 0x0001
52
52
#define NGX_HTTP_LUA_SHDICT_REPLACE 0x0002
53
53
#define NGX_HTTP_LUA_SHDICT_SAFE_STORE 0x0004
54
+
54
55
#define NGX_HTTP_LUA_SHDICT_LEFT 0x0001
55
56
#define NGX_HTTP_LUA_SHDICT_RIGHT 0x0002
56
57
@@ -59,6 +60,14 @@ enum {
59
60
SHDICT_USERDATA_INDEX = 1 ,
60
61
};
61
62
63
+ enum {
64
+ SHDICT_TNIL = 0 , // same as LUA_TNIL
65
+ SHDICT_TBOOLEAN = 1 , // same as LUA_TBOOLEAN
66
+ SHDICT_TNUMBER = 3 , // same as LUA_TNUMBER
67
+ SHDICT_TSTRING = 4 , // same as LUA_TSTRING
68
+ SHDICT_TLIST = 5 ,
69
+ };
70
+
62
71
63
72
#define ngx_http_lua_shdict_get_list_head (sd , key_len ) \
64
73
(ngx_queue_t *) ngx_align_ptr(((u_char *) &sd->data + key_len), \
@@ -305,7 +314,7 @@ ngx_http_lua_shdict_expire(ngx_http_lua_shdict_ctx_t *ctx, ngx_uint_t n)
305
314
}
306
315
}
307
316
308
- if (sd -> value_type == LUA_TTABLE ) {
317
+ if (sd -> value_type == SHDICT_TLIST ) {
309
318
310
319
list_queue = ngx_http_lua_shdict_get_list_head (sd , sd -> key_len );
311
320
@@ -553,12 +562,12 @@ ngx_http_lua_shdict_get_helper(lua_State *L, int get_stale)
553
562
554
563
switch (value_type ) {
555
564
556
- case LUA_TSTRING :
565
+ case SHDICT_TSTRING :
557
566
558
567
lua_pushlstring (L , (char * ) value .data , value .len );
559
568
break ;
560
569
561
- case LUA_TNUMBER :
570
+ case SHDICT_TNUMBER :
562
571
563
572
if (value .len != sizeof (double )) {
564
573
@@ -574,7 +583,7 @@ ngx_http_lua_shdict_get_helper(lua_State *L, int get_stale)
574
583
lua_pushnumber (L , num );
575
584
break ;
576
585
577
- case LUA_TBOOLEAN :
586
+ case SHDICT_TBOOLEAN :
578
587
579
588
if (value .len != sizeof (u_char )) {
580
589
@@ -590,7 +599,7 @@ ngx_http_lua_shdict_get_helper(lua_State *L, int get_stale)
590
599
lua_pushboolean (L , c ? 1 : 0 );
591
600
break ;
592
601
593
- case LUA_TTABLE :
602
+ case SHDICT_TLIST :
594
603
595
604
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
596
605
@@ -750,7 +759,7 @@ ngx_http_lua_shdict_flush_expired(lua_State *L)
750
759
751
760
if (sd -> expires != 0 && sd -> expires <= now ) {
752
761
753
- if (sd -> value_type == LUA_TTABLE ) {
762
+ if (sd -> value_type == SHDICT_TLIST ) {
754
763
755
764
list_queue = ngx_http_lua_shdict_get_list_head (sd , sd -> key_len );
756
765
@@ -991,17 +1000,17 @@ ngx_http_lua_shdict_set_helper(lua_State *L, int flags)
991
1000
992
1001
switch (value_type ) {
993
1002
994
- case LUA_TSTRING :
1003
+ case SHDICT_TSTRING :
995
1004
value .data = (u_char * ) lua_tolstring (L , 3 , & value .len );
996
1005
break ;
997
1006
998
- case LUA_TNUMBER :
1007
+ case SHDICT_TNUMBER :
999
1008
value .len = sizeof (double );
1000
1009
num = lua_tonumber (L , 3 );
1001
1010
value .data = (u_char * ) & num ;
1002
1011
break ;
1003
1012
1004
- case LUA_TBOOLEAN :
1013
+ case SHDICT_TBOOLEAN :
1005
1014
value .len = sizeof (u_char );
1006
1015
c = lua_toboolean (L , 3 ) ? 1 : 0 ;
1007
1016
value .data = & c ;
@@ -1094,7 +1103,7 @@ ngx_http_lua_shdict_set_helper(lua_State *L, int flags)
1094
1103
1095
1104
if (value .data
1096
1105
&& value .len == (size_t ) sd -> value_len
1097
- && sd -> value_type != LUA_TTABLE )
1106
+ && sd -> value_type != SHDICT_TLIST )
1098
1107
{
1099
1108
1100
1109
ngx_log_debug0 (NGX_LOG_DEBUG_HTTP , ctx -> log , 0 ,
@@ -1140,7 +1149,7 @@ ngx_http_lua_shdict_set_helper(lua_State *L, int flags)
1140
1149
1141
1150
remove :
1142
1151
1143
- if (sd -> value_type == LUA_TTABLE ) {
1152
+ if (sd -> value_type == SHDICT_TLIST ) {
1144
1153
queue = ngx_http_lua_shdict_get_list_head (sd , key .len );
1145
1154
1146
1155
for (q = ngx_queue_head (queue );
@@ -1342,7 +1351,7 @@ ngx_http_lua_shdict_incr(lua_State *L)
1342
1351
1343
1352
/* rc == NGX_OK */
1344
1353
1345
- if (sd -> value_type != LUA_TNUMBER || sd -> value_len != sizeof (double )) {
1354
+ if (sd -> value_type != SHDICT_TNUMBER || sd -> value_len != sizeof (double )) {
1346
1355
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
1347
1356
1348
1357
lua_pushnil (L );
@@ -1412,7 +1421,7 @@ ngx_http_lua_shared_dict_get(ngx_shm_zone_t *zone, u_char *key_data,
1412
1421
1413
1422
switch (value -> type ) {
1414
1423
1415
- case LUA_TSTRING :
1424
+ case SHDICT_TSTRING :
1416
1425
1417
1426
if (value -> value .s .data == NULL || value -> value .s .len == 0 ) {
1418
1427
ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 , "no string buffer "
@@ -1431,7 +1440,7 @@ ngx_http_lua_shared_dict_get(ngx_shm_zone_t *zone, u_char *key_data,
1431
1440
ngx_memcpy (value -> value .s .data , data , len );
1432
1441
break ;
1433
1442
1434
- case LUA_TNUMBER :
1443
+ case SHDICT_TNUMBER :
1435
1444
1436
1445
if (len != sizeof (double )) {
1437
1446
ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 , "bad lua number "
@@ -1445,7 +1454,7 @@ ngx_http_lua_shared_dict_get(ngx_shm_zone_t *zone, u_char *key_data,
1445
1454
ngx_memcpy (& value -> value .b , data , len );
1446
1455
break ;
1447
1456
1448
- case LUA_TBOOLEAN :
1457
+ case SHDICT_TBOOLEAN :
1449
1458
1450
1459
if (len != sizeof (u_char )) {
1451
1460
ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 , "bad lua boolean "
@@ -1548,11 +1557,11 @@ ngx_http_lua_shdict_push_helper(lua_State *L, int flags)
1548
1557
1549
1558
switch (value_type ) {
1550
1559
1551
- case LUA_TSTRING :
1560
+ case SHDICT_TSTRING :
1552
1561
value .data = (u_char * ) lua_tolstring (L , 3 , & value .len );
1553
1562
break ;
1554
1563
1555
- case LUA_TNUMBER :
1564
+ case SHDICT_TNUMBER :
1556
1565
value .len = sizeof (double );
1557
1566
num = lua_tonumber (L , 3 );
1558
1567
value .data = (u_char * ) & num ;
@@ -1577,7 +1586,7 @@ ngx_http_lua_shdict_push_helper(lua_State *L, int flags)
1577
1586
if (rc == NGX_DONE ) {
1578
1587
/* exists but expired */
1579
1588
1580
- if (sd -> value_type != LUA_TTABLE ) {
1589
+ if (sd -> value_type != SHDICT_TLIST ) {
1581
1590
/* TODO: reuse when length matched */
1582
1591
1583
1592
ngx_log_debug0 (NGX_LOG_DEBUG_HTTP , ctx -> log , 0 ,
@@ -1626,7 +1635,7 @@ ngx_http_lua_shdict_push_helper(lua_State *L, int flags)
1626
1635
1627
1636
} else if (rc == NGX_OK ) {
1628
1637
1629
- if (sd -> value_type != LUA_TTABLE ) {
1638
+ if (sd -> value_type != SHDICT_TLIST ) {
1630
1639
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
1631
1640
1632
1641
lua_pushnil (L );
@@ -1683,9 +1692,9 @@ ngx_http_lua_shdict_push_helper(lua_State *L, int flags)
1683
1692
1684
1693
sd -> value_len = 0 ;
1685
1694
1686
- dd ("setting value type to %d" , (int ) LUA_TTABLE );
1695
+ dd ("setting value type to %d" , (int ) SHDICT_TLIST );
1687
1696
1688
- sd -> value_type = (uint8_t ) LUA_TTABLE ;
1697
+ sd -> value_type = (uint8_t ) SHDICT_TLIST ;
1689
1698
1690
1699
ngx_memcpy (sd -> data , key .data , key .len );
1691
1700
@@ -1851,7 +1860,7 @@ ngx_http_lua_shdict_pop_helper(lua_State *L, int flags)
1851
1860
1852
1861
/* rc == NGX_OK */
1853
1862
1854
- if (sd -> value_type != LUA_TTABLE ) {
1863
+ if (sd -> value_type != SHDICT_TLIST ) {
1855
1864
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
1856
1865
1857
1866
lua_pushnil (L );
@@ -1888,12 +1897,12 @@ ngx_http_lua_shdict_pop_helper(lua_State *L, int flags)
1888
1897
1889
1898
switch (value_type ) {
1890
1899
1891
- case LUA_TSTRING :
1900
+ case SHDICT_TSTRING :
1892
1901
1893
1902
lua_pushlstring (L , (char * ) value .data , value .len );
1894
1903
break ;
1895
1904
1896
- case LUA_TNUMBER :
1905
+ case SHDICT_TNUMBER :
1897
1906
1898
1907
if (value .len != sizeof (double )) {
1899
1908
@@ -2014,7 +2023,7 @@ ngx_http_lua_shdict_llen(lua_State *L)
2014
2023
2015
2024
if (rc == NGX_OK ) {
2016
2025
2017
- if (sd -> value_type != LUA_TTABLE ) {
2026
+ if (sd -> value_type != SHDICT_TLIST ) {
2018
2027
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
2019
2028
2020
2029
lua_pushnil (L );
@@ -2200,17 +2209,17 @@ ngx_http_lua_ffi_shdict_store(ngx_shm_zone_t *zone, int op, u_char *key,
2200
2209
2201
2210
switch (value_type ) {
2202
2211
2203
- case LUA_TSTRING :
2212
+ case SHDICT_TSTRING :
2204
2213
/* do nothing */
2205
2214
break ;
2206
2215
2207
- case LUA_TNUMBER :
2216
+ case SHDICT_TNUMBER :
2208
2217
dd ("num value: %lf" , num_value );
2209
2218
str_value_buf = (u_char * ) & num_value ;
2210
2219
str_value_len = sizeof (double );
2211
2220
break ;
2212
2221
2213
- case LUA_TBOOLEAN :
2222
+ case SHDICT_TBOOLEAN :
2214
2223
c = num_value ? 1 : 0 ;
2215
2224
str_value_buf = & c ;
2216
2225
str_value_len = sizeof (u_char );
@@ -2285,7 +2294,7 @@ ngx_http_lua_ffi_shdict_store(ngx_shm_zone_t *zone, int op, u_char *key,
2285
2294
2286
2295
if (str_value_buf
2287
2296
&& str_value_len == (size_t ) sd -> value_len
2288
- && sd -> value_type != LUA_TTABLE )
2297
+ && sd -> value_type != SHDICT_TLIST )
2289
2298
{
2290
2299
2291
2300
ngx_log_debug0 (NGX_LOG_DEBUG_HTTP , ctx -> log , 0 ,
@@ -2328,7 +2337,7 @@ ngx_http_lua_ffi_shdict_store(ngx_shm_zone_t *zone, int op, u_char *key,
2328
2337
2329
2338
remove :
2330
2339
2331
- if (sd -> value_type == LUA_TTABLE ) {
2340
+ if (sd -> value_type == SHDICT_TLIST ) {
2332
2341
2333
2342
queue = ngx_http_lua_shdict_get_list_head (sd , key_len );
2334
2343
@@ -2496,12 +2505,12 @@ ngx_http_lua_ffi_shdict_get(ngx_shm_zone_t *zone, u_char *key,
2496
2505
value .len = (size_t ) sd -> value_len ;
2497
2506
2498
2507
if (* str_value_len < (size_t ) value .len ) {
2499
- if (* value_type == LUA_TBOOLEAN ) {
2508
+ if (* value_type == SHDICT_TBOOLEAN ) {
2500
2509
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
2501
2510
return NGX_ERROR ;
2502
2511
}
2503
2512
2504
- if (* value_type == LUA_TSTRING ) {
2513
+ if (* value_type == SHDICT_TSTRING ) {
2505
2514
* str_value_buf = malloc (value .len );
2506
2515
if (* str_value_buf == NULL ) {
2507
2516
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
@@ -2512,12 +2521,12 @@ ngx_http_lua_ffi_shdict_get(ngx_shm_zone_t *zone, u_char *key,
2512
2521
2513
2522
switch (* value_type ) {
2514
2523
2515
- case LUA_TSTRING :
2524
+ case SHDICT_TSTRING :
2516
2525
* str_value_len = value .len ;
2517
2526
ngx_memcpy (* str_value_buf , value .data , value .len );
2518
2527
break ;
2519
2528
2520
- case LUA_TNUMBER :
2529
+ case SHDICT_TNUMBER :
2521
2530
2522
2531
if (value .len != sizeof (double )) {
2523
2532
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
@@ -2532,7 +2541,7 @@ ngx_http_lua_ffi_shdict_get(ngx_shm_zone_t *zone, u_char *key,
2532
2541
ngx_memcpy (num_value , value .data , sizeof (double ));
2533
2542
break ;
2534
2543
2535
- case LUA_TBOOLEAN :
2544
+ case SHDICT_TBOOLEAN :
2536
2545
2537
2546
if (value .len != sizeof (u_char )) {
2538
2547
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
@@ -2606,7 +2615,7 @@ ngx_http_lua_ffi_shdict_incr(ngx_shm_zone_t *zone, u_char *key,
2606
2615
2607
2616
/* rc == NGX_OK */
2608
2617
2609
- if (sd -> value_type != LUA_TNUMBER || sd -> value_len != sizeof (double )) {
2618
+ if (sd -> value_type != SHDICT_TNUMBER || sd -> value_len != sizeof (double )) {
2610
2619
ngx_shmtx_unlock (& ctx -> shpool -> mutex );
2611
2620
* err = "not a number" ;
2612
2621
return NGX_ERROR ;
0 commit comments