1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
|
Sun Dec 31 01:02:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace/OS (mmap): Added a new parameter to the argument list for
mmap(). This parameter is an ACE_HANDLE * and is used in the
Win32 implementation, which requires CreateFileMapping to open a
new HANDLE. This handle is passed back to the caller, which is
then responsible for freeing it... I'll probably need to modify
the ACE_Mem_Map class to manage this new handle for the WIN32
version.
* ace: Updated all the SPIPE files in preparation to porting them
to Windows NT, where they will be implemented using Win32 Named
Pipes!
* ace/Typed_SV_Message: Fixed a mysterious braino where the method
definitions for Typed_SV_Message were actually within
Typed_SV_Message_Queue.cpp. I'm not sure why this happened, but
it's clearly been this way for eons... Also, changed the name
of the method "max" to "max_size" to avoid conflicts with macros
on Windows NT...
* ace: Added a new config symbol: ACE_HAS_SYSV_IPC. If this is
*not* set (e.g., Win32) then don't try to compile any of the
System V IPC mechanisms (e.g., shared memory, message queues,
semaphores).
* ace/Malloc: Reimplemented the Malloc-family to factor out common
code. Also added a new method called "trybind" which atomically
tries to bind a new void *pointer to a char *name. If there is
no name with the same value, the bind succeeds. Otherwise, the
bind "fails", but returns the existing pointer.
* ace/Map_Manager: Reimplemented the Map_Manager to factor out
common code. Also added a new method called "trybind" which
atomically tries to bind a new int_id to an ext_id. If there is
no ext_id with the same name, the bind succeeds. Otherwise, the
bind "fails", but returns the existing int_id.
* ace/Memory_Pool.cpp: Commented out all the diagnostic messages
in the various ACE_*_Memory_Pools. Now that we're actually
using this within ACE, they were distracting.
* ace/CORBA_Handler.cpp (ACE_ST_CORBA_Handler): Gave iterations_
an initial value of "5" for backwards compatibility. Thanks to
Irfan for doing this.
* ace/Map_Manager.cpp (ACE_Map_Manager): Fixed some more braino in
the constructors of Map_Manager. During the recent changes I'd
forgotten to initialize the Map_Manager's instance variables to
0. Thanks to Irfan for finding this out the hard way... ;-)
* ace/OS.i (gettimeofday): Added a WIN32 implementation of
gettimeofday. This is pretty nasty, but it should centralize
all of this processing in one place in ACE!
Sat Dec 30 00:50:20 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace/Timer_Queue: Removed the current_time() method from the
Timer_Queue class. All uses will be replaced with calls to
ACE_OS::gettimeofday(). Not only does this factor out more
code, but it is also reentrant!
* ace/ACE.cpp (handle_timed_accept): Consolidated code so that
select() is always used, rather than poll().
* ace: Generalized the ACE file locking wrappers (both at the
Synch-level and the ACE_OS class level) to enable them to lock
arbitrary regions (aka "records") of a file. Before, they could
only lock the entire file (which remains the default behavior).
This new behavior works for both NT and UNIX.
* ace/Synch: Removed the definition and use of the
ACE_SYNCH_ERROR_RETURN macro from all the ACE Synch* methods.
This behavior has been integrated into the ACE_OS class instead
since it cleans up lots of code that would otherwise have been
hard to write.
* ace/INET_Addr.cpp (get_host_name): Fixed a bug that arose by
trying to use the reentrant version of gethostbyaddr all the
time. In order to fix this, I've added a new get_host_name()
method that allows the caller to supply a buffer for the
hostname.
* ace: Cleaned up all the POSIX_TIMER junk that permeated ACE.
Now all platforms will have the POSIX timer structures (e.g.,
timestruc_t and timespec), though only those that actually
support nano-second timing will be able to do anything useful
with this... As part of this cleanup, the poll, select, and
cond_timedwait method in ACE_OS now take ACE_Time_Value * rather
than int, timeval *, and timestruc_t, respectively. This
*greatly* cleans up the clutter throughout the rest of ACE.
* ace/ACE: Added two new methods called tv2msec and msec2tv that
converts ACE_Time_Value format into millisecond format and vice
versa. This will make it easier to port code between NT and
UNIX.
* ace/Reactor: Removed the code in the Reactor that previously
allowed it to be resized after it had been initialized. This
code no longer was used due to the recent enhancements that
ensure the Reactor is only initialized once per-process.
* ace/Reactor: Modified the Reactor so that it now compiles on NT.
It doesn't work yet, but at least it compiles!
* ace/Reactor: Moved the "max3" method from the Reactor to OS.h,
where it has become a template function usable throughout ACE.
* ace/OS.cpp: Added extern "C" before the NT implementations of
readv() and writev().
* ace/OS.i: Fixed the declaration of ::readv() and ::writev() for
cases where the OS doesn't provide them natively.
* ace/Event_Handler: Modified handle_signal() to take an int
rather than an ACE_HANDLE. The old way broke under NT...
* ace: Made lots of minor changes to resolve signed int
vs. unsigned int mismatches. Thanks to the MSVC++ 4.0 compiler
for pointing these out. At least it's good for
something... ;-).
Fri Dec 29 15:01:10 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace/ACE.cpp (handle_timed_accept): Reimplemented the core
select() loop to make the code portable to Win32.
* ace/Map_Manager.cpp (ACE_Map_Manager): Fixed a minor bug caused
by recent changes (forgot to initialize max_size_ in the
constructor...).
* Updated all the manual pages to reflect the latest changes.
* ace/ACE.cpp: Fixed up the ACE class so that all of the methods
should compile on both Windows NT and UNIX!
* ace/OS: Moved the get_file_size() method from class ACE and put
it into class ACE_OS, where it's been renamed to filesize().
This is really more of an "OS" function, e.g., it's supported on
Win32 directly.
* ace/OS.cpp: added readv() and writev() implementations for those
platforms (e.g., Windows NT) that require them.
* ace/Makefile: Added a new regex to the Svc_Conf_l.cpp target
that will substitute <stdio> for <unistd>. This should solve a
portability problem with Windows NT...
* ace/Malloc: Modified the sync() and protect() methods to use
void * rather than char *. This is now consistent with the OS
classes.
* ace/OS: Changed things so that all the mmap() related OS
wrappers use void * in their external interface. Any
discrepancies between platforms are now dealt with internally,
in the implementation of the methods. Thanks to Chris Lahey
(clahey@ix.netcom.com) for suggesting this.
* ace/Local_Name_Space: Modified how ACE_NS_String is used to
instantiate ACE_Map_Manager in order to work around problems
with AIX C++. Thanks to Chris Lahey (clahey@ix.netcom.com) for
reporting this.
* ace/Synch.i: Added a definition for ACE_RW_Mutex::acquire().
Fri Dec 29 00:34:16 1995 Chris Lahey (clahey@ix.netcom.com)
* ace/OS.h: Changed the #ifdef for ACE_HAS_COMPLEX_LOCKS to
ACE_HAS_COMPLEX_LOCK.
Changed prototypes for ACE_OS:mprotect(), msync(), and munmap()
to accept ACE_MMAP_TYPE for their first arg. The AIX versions
of these calls all expect void * for their pointer variable.
Note that madvise() takes a caddr_t for its 1st arg and
therefore does not need to be altered. (See related changes in
OS.i and Mem_Map.i)
Changed prototype for ACE_OS::getsockname(), arg3 to int * (See
related change in OS.i)
Changed prototype for ACE_OS::setsockopt(), arg4 to const char *
and arg 5 to int (See related change in OS.i)
* ace/OS.i: Changed function definition for ACE_OS::mprotect(),
msync(), and munmap() to accept ACE_MMAP_TYPE as their 1st arg.
The following changes relate to the inconsistencies in the
sockets calls on AIX. I thought it would make more sense to
leave the public interfaces alone and then handle the
differences internally. That way it won't break any exisiting
code.
Changed function definition for ACE_OS::getsockname() to accept
arg3 as int *. Made similar changes in ACE_OS::setsockopt() -
change definition to accept const char * for arg4 and int for
arg5. Add the following code at the start of the function:
Also made changes to ACE_OS::recvfrom() - change arg 6 back so it is
int *.
* ace/Mem_Map.i: In ACE_Mem_Map::advise(), cast 1st arg to
ACE_OS:madvise() to (caddr_t).
* ace/Memory_Pool.cpp: In ACE_MMAP_Memory_Pool::acquire(), make
cast to char * in the return statement. In
ACE_MMAP_Memory_Pool::handle_signal(), also make same cast in
the ACE_DEBUG statement near the top of the function.
* ace/Reactor.cpp and ace/Reactor.h: ACE_Reactor::handler_i()
doesn't return properly if *eh != 0. Remove last "else" so
function always returns 0 if handler != 0.
In ACE_Reactor::owner(), we need to change signature since
thread_t is not an integer. This has been changed to int
ACE_Reactor::owner(thread_t *t_id); The last two lines have been
changed to: *t_id = this->owner_; return 0;
* ace/Synch.cpp: In ACE_Condition_Mutex::wait(), the call to
cond_timedwait() does not exist, but ACE_OS::cond_timedwait()
does exist. It takes the same arguments.
* ace/Synch.h and ace/Synch_T.h: At the end of both files, before
the #define INLINE check for this define's existence to avoid
causing compilers to choke.
* ace/Mem_Map.i: In ACE_Mem_Map::operator(), the return statement
looked very odd. In the assignment to addr, why is the ", 0" in
the statement?
Fri Dec 29 00:34:16 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu)
* ace: Fixed up many minor problems with the various types of
Shared_Memory wrappers. This mostly entailed changing from char
* to void * to be more consistent with the other parts of ACE.
In addition, I now only include the *.i files if __INLINE__ is
enabled.
* ace/Memory_Pool.cpp (map_file): Fixed a minor bug by enabling
MAP_FIXED if we're trying to map a file using a fixed address.
Thu Dec 28 18:39:16 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu)
* ace/Local_Name_Space.cpp: Finished implementing changes to the
ACE_Malloc stuff and the Local_Name_Space that Irfan had begun
last semester.
* ace/SString.cpp: Added new optimizations to the assignment
operators of the ACE_[WCS]String classes to avoid
freeing/allocating memory if the current size is large enough.
* ace/SString: Added copy constructors...
* ace/Local_Name_Space.cpp: Modified the implementation of bind()
to avoid a race condition.
* ace/Map_Manager.cpp (bind): Changed the semantics of bind() so
that callers can control whether or not INT_IDs are reassigned.
Also changed things so that callers can get back the existing
value if they choose not to reassign.
* ace/SString.cpp: Removed the "P" (persistent) versions of all
these classes and merged them into the default versions. The
persistence is now determined by the type of allocator passed in
as a parameter to the constructor (or by using the "default"
allocator that is accessible via
ACE_Service_Config::allocator()).
* ace/Map_Manager.cpp: Removed the "P" (persistent) versions of
all these classes and merged them into the default versions.
The persistence is now determined by the type of allocator
passed in as a parameter to the constructor (or by using the
"default" allocator that is accessible via
ACE_Service_Config::allocator()).
* ace/Malloc_T: Modified the bind() algorithm so that it will
allow the caller to determine whether duplicates are allowed or
not... Also changed things so that callers can get back the
existing value if they choose not to allow duplicates. Irfan
questions the sanity of this... ;-)
* ace/Synch: To be consistent, added acquire_write and
acquire_read methods to ACE_Mutex. These are useful for cases
where we are going to be parameterizing classes like ACE_Malloc
with some type of mutex wrapper (e.g., ACE_RW_Mutex, ACE_Mutex).
* ace/Malloc_T.cpp (calloc): Added a new method called "calloc"
that will not only allocate the memory dynamically, but will
also give it an initial value (e.g., '\0').
Thu Dec 28 01:10:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace/OS.i: Modified the implementation of the TLI methods so that
they are conditionally compiled away if the platform doesn't
support TLI... Thanks to Neil Cohen for pointing out the need
for this...
* ace/OS.i: Modified the implementation of dlopen() and dlsym() to
account for limitations with SunOS 4.x...
* ace/Service_Repository.cpp: Modified this class to use the
ACE_OS::dlclose method.
* ace/Parse_Node.cpp: Modified this class to use the
ACE_OS::dlopen and ACE_OS::dlsym methods.
Wed Dec 27 23:25:03 1995 Jesper S. M|ller (stophph@diku.dk)
* Added appropriate flags in OS.h for successful inclusion of
several header files, such as Malloc.h and friends. Also added
mprotect to ACE_OS for Win32 to avoid linker errors.
* Added a return value (from map_file) to
ACE_MMAP_Memory_Pool::handle_signal. The compiler was
complaining. Likewise on
ACE_MMAP_Memory_Pool::commit_backing_store (there 0 seemed like
the correct off-the-end return value).
* Removed include of some SV semaphore file, if not needed in
Malloc.h. Worse for Memory_Pool.h, since the SV_Semaphore
wrappers consistently differ completely from the other
synchronization routines. I guess we'll need some variant of
ACE_Process_Semaphore that takes an integer as a key instead of
a string, and does not perform automatic init/destroy.
* Also upgraded fd's from int to ACE_HANDLEs and changes -1 to
ACE_INVALID_HANDLE where appropriate.
* By help of aggresive preprocessor conditionals, made Handle_Set
work with Win32. There is a fd_set abstraction with appropriate
FD_xxx macros for WinSock, and it requires no sync'ing. The
Handle_Set_Iterator should also work. The good looks of
Handle_Set was impaired, though. Right now, the trigger is the
ACE_WIN32 flag, although it should be something like
ACE_FD_SET_USES_BITS for the unix approach, or like
ACE_FD_SET_USES_VECTOR for the WinSock approach.
* Reactor almost compiles now, but not quite: Handlers are
addressed by fd, this is no longer possible - what a mess - we
need to step through the handle indices somehow. This will
likely get into some nasty quadratic complexities when iterating
the handles to find the event_handler for each file
handle. Mabye we can circumvent this with a hash table lookup
for those opaque handles.
* There was a problem with the Svc_Conf.l.cpp and the
Svc_Conf.y.cpp and the extremely lame MSVC++ 2.0. I had to
rename them to Svc_Conf_y.cpp, etc. Awful!
* Added code to inquire the 'host' name for Win32 in the ACE_Client_Id
class. Another candidate for ACE_OS.
* About 60 or so ACE .cpp files compile now, which reminds me that
I'll be working on some precompiled header scheme soon, since it
takes for ever and ever, even on my 32meg system with pretty
good SCSI drives. Mabye it's because I'm only running a 66MHz
i486 DX2 (yawn).
* Dozens of other changes have been made to various files, all
pertaining to int vs. ACE_HANDLE. In Service_Manager.h, a signal
number was an ACE_HANDLE, but just close by, some fd's were
ints. Fixed that, too.
Sat Dec 23 14:15:16 1995 Jesper S. M|ller (stophph@diku.dk)
* I've also grouped the .i and .cpp functions by class,
and #if'ed the sbrk and SysV pools out, since
Win32 cannot support those.
* Added 'inline' to day accessor functions in Date_Time.
* Two things that missed me in Trace.cpp:
1) The inclusion order was so that I couldn't
build Trace.o, since it didn't know the MALLOC_HOOK thing.
I moved the #include of Trace.h down below that of ACE.h.
2) The declaration and definition of the ACE_Trace constructor
differed by a const, which I added.
3) When linking, multiple symbols were found for some
OS calls like mutex_init, corresponding to the larger
OS Win32 functions. I has ACE_INLINED_OS_CALLS off,
so sometimes the OS functions were inlined, sometimes
not.
I disabled the inline hack in Trace.cpp for WIN32 for now.
This seemed to resolve matters.
* There was a major problem in OS.i, where Synch.h was needed for
mutex support (in conjunction with TSS info linked list). I
chose to make thr_keycreate and some others non-inlined.
* More 'is-it-a-handle-or-success' confusion in SOCK*.* Changed
ACE_SOCK_Dgram to use int status. Changed ACE_SOCK_CODgram to
use int status. Changed ACE_LSOCK to use int status. Also
changed a few derived classes
Fri Dec 22 14:03:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu)
* ace/OS.h: Added a new type for rwlock_t for platforms that don't
support threading... Thanks to Neil Cohen for reporting this.
* ace: Merged in all of Jesper's changes for NT and Chris Lahey's
changes for AIX.
* ace: Merged tli.h into OS.h to avoid name conflicts on Win32.
* Fixed duplicated names where case is the only difference.
ace/thread.cpp
ace/Thread.cpp
ace/TLI.h
ace/tli.h
apps/Token_Server/mutex_example/simple_token_client.cpp
apps/Token_Server/mutex_example/Simple_Token_Client.cpp
apps/Token_Server/script_example/scripting_token_client.cpp
apps/Token_Server/script_example/Scripting_Token_Client.cpp
tests/IPC_SAP/SOCK_SAP/FD-client.cpp
tests/IPC_SAP/SOCK_SAP/fd-client.cpp
tests/IPC_SAP/SOCK_SAP/FD-server.cpp
tests/IPC_SAP/SOCK_SAP/fd-server.cpp
Wed Dec 20 22:26:24 1995 Jesper S. M|ller (stophph@diku.dk)
* FIFO.cpp: One last comparison of 'open' return status where and
ACE_INVALID_HANDLE should be changed to -1.
* One more last wrong comparison in FIFO_Recv_Msg.cpp.
(Never say never again!)
* Put an appropriate conditional around the inclusion of
Handle_Set.h for ACE_WIN32 (for now).
* Introduced a few backslashes in the macros of Dump.h that were
somehow left out... Had to add a really stupid constructor for
struct Tuple. I haven't a clue why MSVC++ wants this! Replaced
'return ACE_ODB;' with 'return ACE_ODB::instance_;' in the
Singleton access function.
* Added a constructor for ACE_ODB. It may be private, but it still
needs to be defined...
* Stack and Set compiles fine for Win32 (not surprisingly)
* If'ed out the guts of ACE_IPC_SAP enable/disable calls for
Win32, since async IO doesn't work that way on there.
* Event_Handler now uses ACE_INVALID_HANDLE for default args.
* SOCK compiles except for the ACE_SOCKET <> ACE_HANDLE
problem. Refer to issue #3 above.
* We're swamping the ace directory with .mak files. I used the
winntace.mak file, which is compilable and linkable.
Thu Dec 21 15:37:42 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu)
* ace: Greatly simplified the include files so that (1) compilers
are faster and (2) the ACE_Trace mechanism works correctly.
* ace/Trace: Modified the ACE_Trace_TSS class so that it is no
longer a template. This was overkill since we know the type
head of time (i.e., ACE_Trace_State).
* ace: Added a number of new changes to ACE to make things work on
AIX. Thanks to Chris Lahey <clahey@ix.netcom.com> for these
changes.
* ace/Thread_Manager.cpp: Removed the get_max_thr_id() method
since it was not portable to NT or POSIX pthreads. Nothing in
ACE depended on it anyway...
* ace/OS: Added a new static data member called NULL_thread that
is a "zero'd" out thread id. This is necessary to deal with the
POSIX pthread implementation of a thread id, which is not always
implemented as a number... By using this new approach, all the
special-case code in Synch.cpp disappears...
* ace/OS: Added a new method to class ACE_OS called thr_equal()
that masks the differences between comparing thread ids using
the threading libraries. This simplifies the code in Synch.cpp
and Reactor.cpp.
* ace: Updated all uses of mmap() to use the new ACE_MMAP_TYPE
typedef. This deals with the fact that different versions of
UNIX define mmap() inconsistently (e.g., some use void * and
some use char *...).
* ace: Removed testconfig.h and merged all of those #defines into
OS.h. This centralizes changes in one place and also eliminates
the need for ./apps and ./tests to include extraneous files...
* ace/testconfig.h: Changed all uses of 0666 to ACE_DEFAULT_PERMS.
Also, removed all PERMS enums and substituted ACE_DEFAULT_PERMS
instead.
Wed Dec 20 17:29:55 1995 Tim H. Harrison (harrison@merengue.cs.wustl.edu)
* Rewrote the Token deadlock detection algorithm. It now performs
"best-effort" detection of deadlock for remote acquires and
complete deadlock detection for local acquires.
Wed Dec 20 02:37:39 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace/OS.h: The select() system call has its own include file on
AIX: <sys/select.h>. We can wrap the #include with a variable
#if defined (ACE_HAS_SELECT_H).
* include/makeinclude/platform_aix.GNU: Added new support for AIX.
Thanks to Chris Lahey <clahey@ix.netcom.com> for these changes.
Added a number of other minor changes, as well.
* ace: Made a bunch of minor changes to get ACE to compile on
SunOS4.x, Linux, and SGI.
* ace/config-linux.h: added ACE_HAS_MSG (thanks to Neil Cohen
for this).
* ace/OS.h: Conditionally compile for ACE_HAS_UTIME for
<sys/utime.h>.
* Released an alpha version of ACE containing the new Windows NT
port.
* Integrated and tested all the new Windows NT changes in class
ACE_OS, as well as the Synch* and Threads* classes. We're now
able to build Jesper's win32_test.cpp file in ./ace! A complete
NT port should be just around the corner...
Tue Dec 19 17:59:04 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* ace: Move the remaining contents of sysincludes.h into ACE.h.
There is no more sysincludes.h (at long last!).
* ace: Rearranged things so that the OS.[hi] files contain all the
OS-specific #defines and #includes that were previously in
sysincludes.h.
* ace: Renamed the ACE_Misc class to class ACE, which is more
representative of what it does.
* INSTALL: updated the installation instructions to explain how
the new directory structure works. Thanks to Neil Cohen for
pointing out the discrepancy beteen the source and the
documentation ;-).
* Reorganized (by flattening) the ACE library directory structure
to make it work for both Windows NT and UNIX. Note that Windows
NT does not have symbolic links, so the old way of doing things
didn't port... The consequences of these changes is there is
now a single directory called $WRAPPER_ROOT/ace that contains
the *.[hi] and *.cpp source files. This is also where the
libACE.a and libACE.so libraries are built by default. Also,
note that the suffix used by ACE has been changed from *.C to
*.cpp to deal with the lame Visual C++ compiler...
Tue Dec 19 01:26:54 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu)
* tests/ASX/Event_Server/Event_Server/Supplier_Router.cpp (put):
Fixed up a problem with the Event_Server. Somewhere along the
way it stopped being concurrent! The new version fixes this.
Thanks to Alex V Maclinvosky <alexm@teltrunk1.tait.co.nz> for
noticing this...
* Added a billion new changes to class OS to integrate the Windows
NT port with the rest of ACE. We are getting very close...
Mon Dec 18 12:45:13 1995 Jesper S. Møller (stophph@diku.dk)
* Major problems in the IPC_SAP. First, I detected that some open
calls returned handles, some returned -1 or 0. For instance
ACE_SOCK has a constructor, that calls this->open and expects a
handle (which it even sets as the current handle
value!). Unfortunately, the return from open is either 0 or -1,
depending on how well the open went. ACE_HANDLE being
typedef'ed to a void* really reveals some problems! I have
solved the problem for the FIFO*.* family and for SOCK.*
Mon Dec 18 12:43:46 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu)
* tests/Reactor/CODgram/CODgram.C (main): Fixed a bug in main()
caused by initializing the Reactor twice. Thanks to Aurelio
Nocerino <aurelio@irsipcs2-27-le0.irsip.na.cnr.it> for reporting
this.
* libsrc/Service_Configurator/Service_Config.C Added a new
constructor to ACE_Service_Config that can be used to initialize
internal variables without performing a full configuration.
Mon Dec 18 01:22:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Service_Config: renamed tokens.h to sc_tokens.h to avoid
file name collision on Win32. Thanks to Jesper S. M|ller
<stophph@diku.dk> for reporting this.
* tests/Mem_Map/IO_Test: renamed io_test.C to test_io.C to avoid
file name collision on Win32. Thanks to Jesper S. M|ller
<stophph@diku.dk> for reporting this.
* libsrc/Misc/OS: Implemented condition variables for Windows NT.
Sun Dec 17 21:23:32 1995 Douglas C. Schmidt (schmidt@merengue.cs.wustl.edu)
* libsrc/Misc/Trace: Fixed up the ACE_Trace class so that it
doesn't include any calls that will improperly trigger infinite
recursion! This allows the ACE library to be traced completely.
Sat Dec 16 19:12:37 1995 Jesper S. Møller (stophph@diku.dk)
* Changes to OS.*:
* Added conditionals to the OS.h for Win32, for the special ACE/Win32
thr_destroy_tss(), which is automatic for Solaris.
* Changed declarations of thr_create, thr_suspend, thr_continue,
thr_join and thr_[gs]etprio to use hthread_t instead of thread_t.
* Changed return type of OS::open from int to ACE_HANDLE.
* Provided non-obtrusive handling of thr_handle in OS::thr_create
for non-Win32.
* Copied ACE::writev to OS::writev for Win32. Something similar
should happen for other systems...
* Changes to Thread.*:
* Changed join, suspend and continue to take handles.
* Added thread handle return address to spawn.
* Changes to Thread_Manager.*:
* Added thread handles to the Thread_Descriptor structure.
* Modified insert_thr and append_thr functions to also take
handles.
* Made ACE_Thread_Descriptor::Thread_State (a enum) public
so Thread_Manager::append_thr could use it as a formal
parameter (I suspect this is a bug in MSVC++).
* Changes the various flavours of suspend, continue, etc. to
use handles instead of id's. Keep in mind that none of this
is destructive for Unix, but vital for Win32.
* There is still a problem with ACE_Thread_Control registering
itself with the Thread_Manager - the thread does not have means
of finding it's own handle. In this particular case, we could
have the thread duplicate it's pseudohandle into a real one,
and pass that one along. I'd really, really, really rather not
have to maintain a thread id->handle mapping myself; It would
slow down thread manipulation and give some troublesome memory
overhead.
* Changes to Log_Msg.*:
* OS::getpid instead of ::getpid.
* Changes to Misc.*:
* Sections inappropriate for Win32 #if'd out...
* Provided naive timestamp function (No date) for Win32.
* Changes to IPC_SAP.*:
* Uses OS::ioctl instead of ::ioctl
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Changes to FIFO.*, :
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Changes to FIFO_Send.*:
* open now returns an int insted of an ACE_HANDLE.
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Changes to FIFO_Send_Msg.*:
* open now returns an int insted of an ACE_HANDLE.
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Uses OS::writev instead of ::writev
* Changes to FIFO_Recv.*:
* open now returns an int insted of an ACE_HANDLE.
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Changes to FIFO_Recv_Msg.*:
* open now returns an int insted of an ACE_HANDLE.
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
* Changes to sysincludes.h:
* Uses ACE_INVALID_HANDLE instead of ACE::INVALID_HANDLE
Sat Dec 16 12:29:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/INET_Addr.C: Changed the implementation so
that the reentrant versions of the library calls are always used
(class OS sorts this all out). This reduces the amount of
clutter in the code.
* libsrc/Threads/Synch: Added a new implementation of
"readers/writer" locks for both Windows NT and POSIX pthreads.
By default, these threads packages don't have this feature.
* libsrc/Threads/Synch: Added a new macro called
ACE_SYNCH_ERROR_RETURN that greatly simplifies the definition of
the synchronization wrappers.
* include/ace/sysincludes.h: Removed the pthreads_map.h file and
integrated this into sysincludes.h.
Fri Dec 15 02:39:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc/OS.i: Finished updating class OS so that it will
compile correctly for OS platforms that don't support threads,
as well as platforms that support POSIX Pthreads vs. Solaris
threads, etc.
* libsrc/Misc/OS: integrated Jesper S. M|ller <stophph@diku.dk>
support for POSIX regular expressions (e.g., compile() and
step()) and sysinfo() into ACE.
* Integrated and tested all of Irfan's changes to ACE to support
the new persistence Name_Server. This added some new classes in
various places that use the ACE_Allocator.
Thu Dec 14 00:23:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/ASX/Event_Server/Event_Server: Fixed an "off by 1" bug in
the declaration of char *argv[3] in the open() methods of
Supplier_Router.C and Consumer_Router.C. Thanks to the "ever
dissatisfied" Alex V Maclinvosky <alexm@teltrunk1.tait.co.nz>
for reporting this.
* libsrc/Service_Configurator/Service_Config: Added a new
"Singleton" access point for the global ACE_Allocator.
* libsrc/Naming/Name_Options.C (parse_args): Made it possible to
change the name of the process on the command line via the -P
option. The default is still to use argv[0] as the process
name.
* include/ace/testconfig.h (ACE_DEFAULT_GLOBALNAME): Changed the
value from "/localnames" to "/globalnames" to avoid a conflict.
* libsrc/Misc/SString.C: Added Irfan's new "persistent" string
mechanisms that use the ACE_Allocator_Manager. We may
eventually update the existing SS* stuff to use this.
* Merged in Jesper S. M|ller <stophph@diku.dk> updates for Windows
NT.
* include/ace/Malloc.h: Added a forward declaration for
ACE_Malloc_Iterator right before ACE_Malloc. Thanks to Antonio
Tortorici <antonio@rh0011.roma.tlsoft.it> for reporting it.
* libsrc/Threads/Synch_T.h: Fixed a small typo in
ACE_Null_Condition. Thanks to Antonio Tortorici
<antonio@rh0011.roma.tlsoft.it> for reporting it.
* include: Added new config-linux.h and platform_macros.GNU config
files for Linux. Thanks to Timothy Newell
<910430n@dragon.acadiau.ca> for this stuff.
Wed Dec 13 23:08:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a small typo in the
ACE_INET_Addr::set (const char port_name[], ACE_UINT32
inet_address) method where the test should be != rather than ==
0. Thanks to Bill Lear (rael@anarchy.cybercom.net) for
reporting this.
Sun Dec 10 12:23:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Service_Configurator/Service_Record.C (init): Fixed a
small problem where a NULL pointer was being returned if a user
passes a non-existent config file (using the -f option) to
ACE_Service_Config::open(). Thanks to Dieter Quehl
(quehl@erlh.siemens.de) for noticing this.
* libsrc/Log_Msg/Log_Msg.C (log): added a new option (%T) that
causes the current timestamp to be inserted into the log msg.
Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting
this.
* libsrc/Misc/Misc: Added a new timestamp() method that returns
the current timestamp in the form
"hour:minute:second:microsecond." The month, day, and year are
also stored in the beginning of the date_and_time array.
* tests/Shared_Malloc: Added Irfan Pyarali <ip1@cec.wustl.edu> new
test program that exercises the new features of ACE_Malloc that
are described in the following bullet.
* libsrc/Shared_Malloc: Added Irfan Pyarali <ip1@cec.wustl.edu>
cool new versions of ACE_Malloc and ACE_MMAP_Memory_Pool. These
new versions provide the following enhancements:
1. Persistence -- via the sync() method
2. Protection -- via the prot() method
3. Named malloc chunks -- via bind(), find(), unbind().
4. Named iteration -- via ACE_Malloc_Iterator
Thu Dec 7 00:31:26 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Signal.C: Replaced ACE_Guard with ACE_TSS_Guard
to ensure that locks are correctly released even if
Event_Handler::handle_signal() callbacks invoke
ACE_Thread::exit(). Thanks to Detlef Becker
(beckerd@erlh.siemens.de) for suggesting this.
* libsrc/Threads/Synch_T: Used inheritance to factor out the
shared code between ACE_Guard, ACE_Read_Guard, and
ACE_Write_Guard in order to reduce unnecessary duplication.
* libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard
to keep a pointer to the LOCK rather than a reference. This
makes the code more flexible and aids in factorization.
* libsrc/Threads/Synch_T: Changed the implementation of ACE_Guard
to incorporate ACE_Try_Guard semantics. This reduces the amount
of classes and duplicate code in ACE.
Wed Dec 6 21:36:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/ace/Trace: Changed the type of the string passed into
ACE_Trace from char * to const char *.
* libsrc/Reactor/Reactor.C: Had forgotten to initialize the
initialized_ and requeue_position_ members appropriately in the
constructor of the ACE_Reactor if ACE_MT_SAFE is *disabled*.
Thanks to Mark Zusman <marklz@topaz.technion.ac.il> for pointing
this out.
* libsrc/Threads/Synch_T.C: changed the order of some methods so
they would be properly defined if ACE_HAS_THREADS and
ACE_HAS_THREAD_SPECIFIC are *not* enabled. This should fix
remaining problems with ACE on SunOS 4 and SGI. Thanks to
Aniruddha Gokhale <gokhale@cs.wustl.edu> for noticing this.
Tue Dec 5 01:06:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Changed things around so that the Name_Server and Token_Server
client interfaces are include in libACE.
* libsrc/Shared_Malloc: added a const char *pool_name to
ACE_Malloc::ACE_Malloc. This is passed into the constructor of
the MEMORY_POOL to make it easier to dynamically name memory
pools.
Mon Dec 4 21:20:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch_T: Modified the place that the
ACE_Thread_Specific methods are defined so that they will be
compiled correctly for platforms without threads or
thread-specific storage.
Sun Dec 3 23:04:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX/Message_Block: Modified clone() so that it takes an
extra parameter that specifies which flags SHOULD NOT BE
TRANSFERED to the clone. This defaults to
ACE_Message_Block::DONT_DELETE. Thanks to Alex V Maclinvosky
<alexm@teltrunk1.tait.co.nz> for suggesting this.
Sun Dec 3 17:43:11 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu)
* The number of files in the Token library has been reduced. As a
result, many of the files have been renamed. Also, the .i files
have been purged of relatively large methods (these have been
moved to the .C files.) Lastly, most uses of dynamic memory
allocation have been removed from the library. This was
important to reduce the amount of serialization in threaded
applications caused by the dynamic allocation.
Sun Dec 3 17:29:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch: Modified all the synchronization classes
so that they disallow assignment and initialization!
* libsrc/Threads/Synch: Moved the ACE_Thread_Specific class from
its own files into the Threads/Synch.[Chi] files. This should
eliminate a set of horrible interdependencies among files.
Sat Dec 2 16:07:40 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu)
* libsrc/Misc/SString.C (ACE_CString): Added a destructor to
CString. Thanks to Tim for noticing this...
Tue Nov 28 17:25:02 1995 Prashant Jain (pjain@tango.cs.wustl.edu)
* apps/Name_Server/client/lib/Name_Proxy: Changed Name_Proxy to
inherit from ACE_Service_Object rather than ACE_Event_Handler.
This will allow a Name_Proxy to be dynamically linked into an
application via the svc.conf file.
* apps/Name_Server/client/lib/Name_Proxy: Added new methods
init, fini, and info.
Tue Nov 28 00:56:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/Threads/test_thread_specific.C: Added code to test the new
ACE_TSS_Guard class...
* libsrc/Threads/Synch_T: Added the new ACE_TSS_Guard class. This
class is similar to the existing ACE_Guard, except that it uses
thread-specific storage to ensure locks are released even if a
thread exits via thr_exit()!
Mon Nov 27 20:39:58 1995 Prashant Jain (pjain@tango.cs.wustl.edu)
* apps/Name_Server/{client,server}/tests: Added new tests to
exercise the key features of the name server.
* apps/Name_Server/client/lib: Simplified access to the nameserver
database. For example, all the network-byte ordering code was
moved out of the Local and Remote Name_Spaces. This code is no
longer necessary since we'll be providing a different means to
get portable name service repositories via a tool that extracts
the "key/value/type" tuples and stores them in a
machine-independent format. The result of this change is that
the Name_Server code is much easier to understand and modify.
* apps/Name_Server/client/lib: Split local and remote name spaces
into two classes to simplify usage. This approach uses the
Bridge pattern to have a baseclass called Binding and then have
subclasses called Local_Name_Space and Remote_Name_Space. The
constructor of Naming_Context then allocates the right one
(i.e., it serves as a factory). This approach remove all the
switch statements in the code and makes it much easier to use
and extend.
* apps/Name_Server: updated all the Name_Server components to
use ACE naming conventions.
* apps/Name_Server/client/lib: Changed ACE_Name_Options to use the
Singleton pattern rather than the global variable...
Mon Nov 27 00:47:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Shared_Malloc/Malloc.h: Named the previously anonymous
struct inside of ACE_Malloc_Header to be
ACE_Malloc_Control_Block in order to keep the OSE tools working.
Thanks to Karlheinz for reporting this.
* libsrc/Threads/Synch: Fixed a major bug in the ACE_Semaphore
wrappers. Apparently, these had slipped between the cracks and
were not correctly mapping onto the ACE return value scheme
where -1 corresponds to an error with errno set to indicate the
type of error.
* tests: Cleaned up some files that mistakenly were defining
LSOCK* objects even for platforms (i.e., Linux) that don't
support them. Thanks to Timothy Newell
<910430n@dragon.acadiau.ca> for noticing this.
Sun Nov 26 12:42:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Shared_Malloc/Malloc: Added a new accessor method
(memory_pool) that returns a reference to the MEMORY_POOL object
used to configure ACE_Malloc.
* libsrc/Shared_Malloc/Malloc: Changed the constructor of
ACE_Malloc to take advantage of the new init_release method on
all the ACE_*_Memory_Pools.
* libsrc/Shared_Malloc/Memory_Pool: Added a new method to all the
ACE_*_Memory_Pool classes called "init_release". This is called
when ACE_Malloc finishes initializing the dynamic memory
manager. This method is necessary in order to initialize the
ACE_MMAP_Memory_Pool correctly if there are multiple processes
that try to initialize ACE_Malloc simultaneously. In addition,
also added an ACE_SV_Semaphore_Complex to the
ACE_MMAP_Memory_Pool in order to serialize initialization
correctly.
* libsrc/Shared_Malloc/Memory_Pool: Added sync() and protect()
methods to all of the ACE_*_Memory_Pool classes in order to
support a uniform interface for use with the "robust memory"
mechanism we're building.
* libsrc/Mem_Map/Mem_Map: Added two new "protect" methods to
ACE_Map_Manager in order to allow clients to change the
protection of memory-mapped regions.
* libsrc/ASX/Map_Manager: Changed Map_Manager methods to use
"const" for EXT_ID and INT_ID at request of Prashant Jain
(pjain@cs.wustl.edu).
* libsrc/Shared_Malloc/Memory_Pool: Revised the
ACE_Shared_Memory_Pool so that it would actually work
correctly... This code hadn't been reviewed carefully before
and there were some bugs...
* libsrc/Shared_Malloc/Malloc: added "INLINE" to the
ACE_Allocator_Adapter components.
* libsrc/Shared_Malloc/Memory_Pool: Greatly simplified and
consolidated the mmap(2) code for ACE_MMAP_Memory_Pool.
* libsrc/Shared_Malloc/Memory_Pool.i (release): Removed the
vestigal this->mmap_.remove() call in release(), but added the
appropriate code to close the fd and unmap the region. Thanks
to Irfan Pyarali <ip1@cec.wustl.edu> for noticing this.
Sat Nov 25 18:12:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/CORBA/CORBA_Handler.C (activate_service):
Modified activate_service so that
if (service_name != 0
&& this->register_service (service_name, marker_name,
service_location) == -1)
return -1;
is changed to
if (service_name != 0 && service_location != 0
&& this->register_service (service_name, marker_name,
service_location) == -1)
return -1;
Irfan Pyarali <ip1@cec.wustl.edu> requested this.
Sat Nov 25 16:41:15 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu)
* libsrc/Misc/Set: Changed all the find() and size() methods to
be const member functions. Thanks to Irfan Pyarali
(ip1@cec.wustl.edu) for requesting this.
Fri Nov 24 02:51:59 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor.C: Fixed the Reactor so that if we're
compiling with DEADLOCK_DETECTION enabled it will create a
uniquely named mutex by stringifying "this".
Thu Nov 23 21:45:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP: Changed
* libsrc/Service_Configurator/Service_Config: Added three new
methods to allow programmers to set the process-wide Singletons
for Reactor, Service_Repository, and Thread_Manager.
Tue Nov 21 01:59:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Mem_Map/Mem_Map.C: Fixed a stupid typo in map_it() that
was causing problems due to unsigned arithmetic semantics...
This should make the file_reverse.C Mem_Map tests work correctly
now... Thanks to Bill Lear <rael@anarchy.cybercom.net> for
noticing the problem.
* tests/Mem_Map/IO-tests/io_test.C (parse_args): Fixed a
classic C/C++ braino in io_test.C:
The for loop in parse_args()
for (int c; (c = get_opt () != -1); )
should be
for (int c; ((c = get_opt ()) != -1); )
How embarrassing. Maybe Bertrand Meyer is right -- C++ is too
dangerous for its own good... ;-). Thanks to Bill Lear
<rael@anarchy.cybercom.net> for finding this!
* Removed all traces of ACE_Condition<ACE_Mutex> from the library.
This should make life much easier for compilers (like G++) that
can't grok templates very well...
* libsrc/Threads/Thread_Specific.C (ts_object): Added a new method
that allows you to simultaneously "test and set" thread-specific
data! This is used to support a neat new trick that ensures
locks are released even if a thr_exit() is called!
* libsrc/Service_Configurator/Service_Repository: Removed the
Recursive_Mutex from Service_Repository and replaced it with a
regular (non-recursive) mutex. Had to rewrite the code a bit so
that it wouldn't try to call internal methods that acquired the
mutex (this leads to instant deadlock!)
Mon Nov 20 01:05:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch: Finally gave in and accepted the fact that
GNU G++ is a horrible, horrible blight on mankind... Changed
the internals of Synch.[Chi] to completely remove any
dependencies on templates. I hope this fixes some portability
problems deep in the libraries... Added several new classes to
reflect this change: ACE_Mutex_Guard, ACE_Mutex_Condition, and
ACE_Recursive_Mutex.
* libsrc/IPC_SAP/UPIPE_SAP/UPIPE_Acceptor.C (ACE_UPIPE_Acceptor):
Fixed a stupid typo that was causing the constructor of
UPIPE_Acceptor to become inlined!!!
* apps/Gateway/Gateway: Fixed up the Makefile so that the gatewayd
executable would compile with G++.
* include/ace/config-irix5.3-sgic++.h: Changed the SGI config.h
file so that it uses select() rather than poll() by default.
The select() version of the Reactor is implemented more
efficiently in ACE...
* include: Added config files for AIX courtesy of Byron Walton
<bwalton@hughes.scg.hac.com>.
* libsrc/Reactor/Signal.C: #ifdef'd out some code in Signal.[hC]
that was causing problems for the HPUX C++ compiler. What a
*horrible* compiler!
* libsrc/Reactor/Event_Handler.h: Added two new methods to
ACE_Event_Handler: get_priority() and set_priority(). These
will be used to control the behavior of the ACE_Reactor's
dispatching. This also required added a new data member to
ACE_Event_Handler that stores the priority (which defaults to
MIN_PRIORITY).
* libsrc/Misc/Stack.C (enqueue): Added a new class called
ACE_Unbounded_Queue. This is required for Tim's Token_Server
connection repository stuff...
* libsrc/CORBA/CORBA_Handler.C: Added new support to both the
single-threaded and multi-threaded versions of CORBA_Handler so
that it will now suspend/resume the services associated with a
CORBA_Handler.
* libsrc/CORBA/CORBA_Handler.C (ACE_MT_CORBA_Handler): Updated the
constructor to use the associated Thread_Manager to spawn a new
thread. This will allow the suspend() and resume() methods to
atomically resume and suspend the daemon thread and its event
handler.
* libsrc/Threads/Synch.h: Fixed up the order of #includes to solve
problems with circular header dependencies!
* Had to add zillions of little changes to avoid problems with
circular includes for G++...
* tests/ASX/Event_Server/Event_Server/Peer_Router.C (bind_peer):
Fixed a typo that had been dormant for ages due to C++'s very
late binding of templates... G++ picked this right up!
Sun Nov 19 11:55:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Signal: Replaced the static HANDLER_SET stuff
withing ACE_Sig_Handlers with a different implementation using
ACE_Fixed_Set. This should fix nasty problems with static
variables on HP/UX...
* Fixed the entire library so that all occurrences of ace_log_msg
are changed to use the ACE_LOG_MSG macro. This macro has magic
properties that should greatly simplify the effort required to
compile ACE robustly on platforms with lame C++ compilers...
* libsrc/Log_Msg/Log_Msg: Finally got my act together with respect
to thread-specific data and the ACE_Log_Msg class. The new
version can be conditionally compiled such that it won't use the
ACE_Thread_Specific smart-pointer wrapper mechanism unless the
platform supports thread-specific storage and threads. This
will make life much easier for lame C++ compilers that can't
handle static data member templates correctly...
* apps/Name_Server/{client,server}/lib/Makefile (LIBS): Added a
reference to -lACE in the Makefiles of the ./lib directories in
order to get GCC to work correctly...
* Added a bunch of fixes courtesy of Bill Lear
<rael@anarchy.cybercom.net> to make ACE compile more cleanly
with GNU GCC 2.7.x.
Sat Nov 18 11:27:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc/Trace.C: Fixed up the ACE_Trace class so that it
will compile better on platforms that don't support
thread-specific storage. The trick was to make a new Singleton
called ACE_Nest_Depth and then conditionally compile it
according to whether the platform supports thread-specific data
or not!
* include/makeinclude/platform_sunos5_g++.GNU: Added the new
config file that should allow ACE to build correctly with GCC
2.7.x. Todd L. Montgomery <tmont@cerc.wvu.edu> deserves a big
round of applause for getting this stuff to work! If I had a
budget, I'd give him a raise ;-)
* libsrc/Misc/Set.C (remove): Tightened up the semantics of all
the *Set::remove() methods so that they return 1 if they
succeed, 0 if the item isn't in the set, and -1 if they fail.
Thanks to Tim Harrison for noticing the inconsistencies.
Fri Nov 17 01:34:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Logger/Reactor_Logger: Fixed up this example app so that it
would compile with GNU G++ correctly. There was a problem with
the order of include files! Thanks to Todd L. Montgomery
<tmont@cerc.wvu.edu> for reporting this.
* libsrc/ASX/Module.C (writer): Fixed ACE_READER so that it is
properly qualified with ACE_Task_Flags::ACE_READER. Thanks to
Neil Cohen (nbc@metsci.com) for finding this!
* apps/Gateway/Gateway/Routing_Entry: Replaced ACE_Fixed_Set with
ACE_Unbounded_Set to get around the seemingly endless problems
with HP/UX...
* libsrc/Misc/Set: Fixed a braino in ACE_Unbounded_Set, where I'd
forgotten to define cur_size_. Thanks to Todd L. Montgomery
<tmont@cerc.wvu.edu> for reporting this.
* libsrc/Connection/Acceptor.C: Change the #undefs of the
shorthand names PA_AC_1, PA_AC_2, and PA_AD in
libsrc/Connection/Acceptor.C to PR_AC_1, PR_AC_2, and PR_AD
(same as in Connector.C and Strategies.C). Thanks to
Dieter Quehl <quehl@erlh.siemens.de> for reporting this.
Thu Nov 16 02:14:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc/Trace: Fixed the ACE_Trace stuff by making the
"nesting_indent_" a static data member. This will undoubtedly
break some lame C++ compilers, but it's easy enough to remove
this stuff via conditional compilation using the ACE_NTRACE
#define in ./include/ace/config.h.
* libsrc/Threads/Thread_Specific.C (cleanup): Under no
circumstances should ACE_Thread_Specific be allowed to
called ACE_Trace. Otherwise, chaos will result!
* apps/Name_Server/{client,server}/tests/Makefile: Switched the
order of the -lACE and -lName* so that -lACE came *afterwards*
in order for the SGI linker to pick up the symbols correctly.
* libsrc/Reactor/Signal: I'd accidentally put the "dump" methods
in the *.i file rather than the *.C file. This was causing
problems for G++.
* libsrc/ASX/Task: Changed all "Q_" prefixes to "ACE_" prefixes in
order to work around a bug with HP/UX...
* Recompiled everything on SunOS 4.x with SunC++ 4.0.1. It seems
to work!
Thu Nov 16 18:05:03 1995 Tim H. Harrison (harrison@tango.cs.wustl.edu)
* I moved around some class declarations so that g++ can properly
instantiate templates for ACE_Token_Collection and
ACE_Token_Manager.
Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu)
* The token library should now compile on platforms which do not
support threads. All token components will be compiled into the
library, but use null mutexes and condition variables. The
remote mutex library shall run properly on single-threaded
platforms, so it compiles as usual.
Wed Nov 15 01:05:38 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Fixed a bunch of minor problems with the SGI port. Things
should work now on IRIX 5.3!
* man/man3: Completely regenerated all the manual pages to
reflect all the recent updates.
* libsrc: Added ACE_TRACE macros to every single method in ACE!
This will help with debugging...
Wed Nov 15 00:26:40 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu)
* The token library should now compile on platforms which do not
support threads. All token components will be compiled into the
library, but use null mutexes and condition variables. The
remote mutex library shall run properly on single-threaded
platforms, so it compiles as usual.
Tue Nov 14 01:58:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/CORBA: Added a new test to illustrate the
ACE_MT_CORBA_Handler.
* libsrc/ASX/Task.C (ACE_Task_Exit): Fixed a niggling problem with
ACE_Task_Exit. Originally, if a thread exited via an implicit
ACE_Thread::exit() (i.e., "falling off the end of the
ACE_Task::svc_run function) then the ACE_Thread_Control on the
thread stack would automatically unregister the thread from the
ACE_Thread_Manager. However, this did *not* occur if a thread
explicitly called ACE_Thread::exit() since in that case the
destructor for ACE_Thread_Control never got called. The
solution to this is a trivial change to ACE_Task_Exit, which now
maintains an instance of ACE_Thread_Control internally, which
will automatically be released when the thread-specific
thread-exit-hook destructor gets called to cleanup upon thread
exit. Since this happens regardless of whether the thread
terminates implicitly or explicitly the ACE_Thread_Manager will
always be able to clean up it's internal resources (unless the
process exit()s, which is a whole different issue... ;-)).
* Changed all occurrences of ACE_CORBA_Handler to
ACE_ST_CORBA_Handler. Now we've got two types of
CORBA_Handlers: single-threaded (ST) and multi-threaded (MT).
Take a look at ./apps/Orbix-examples/Event_Comm/{Supplier,Consumer}
for an example of how to leverage this in a portable manner!
* libsrc/CORBA/CORBA_Handler: Totally redesigned the ACE
CORBA_Handler stuff so that it now uses the Singleton pattern
explicitly, rather than using the half-baked static method
version... Changed the test code to reflect this update!
* libsrc/CORBA/CORBA_Handler.C (activate_service): Changed the
check so that if <service_name> == 0 then we don't try to do a
putit (previously, this check used <marker_name>, which is less
useful...).
* libsrc/CORBA/CORBA_Handler.C (activate_service): Removed the
<default_iterations> flag from the constructor so that we can
make the CORBA_Handler and the MT_CORBA_Handler equivalent.
* include/ace/sysincludes.h: Added a new macro called
ACE_THREAD_EXIT_HOOK that enables application threads
(including the main thread) to register a Task * who's
close method will automatically be called when the thread
exits, either implicitly (by falling off the end) or explicitly
(by a thread calling ACE_Thread::exit ()).
* libsrc/ASX/Task: Moved ACE_Task_Exit into the interface part of
ACE_Task so that Irfan can maybe use this in his stuff ;-).
* libsrc/Misc: Incorporated the ACE_Date_Time class into the
release. This is an *interface* for a system independent
representation of date and time. Implementation will follow...
* libsrc/CORBA: Added a new MT_CORBA_Handler, which makes it
very straightforward to integrate the ACE_Reactor with
multi-threaded (MT) Orbix.
* libsrc/Threads/Token.C: Yow, fixed a dumb problem in Tokens.C
where I was failing to include the *.i file if we weren't
compiling with inlining on!!!!
Mon Nov 13 01:13:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX/Message_Block: Added several new methods to
Message_Block to allow users to access and set various flags.
Thanks to Alex V Maclinvosky <alexm@teltrunk1.tait.co.nz> for
suggesting this and providing a prototype implementation.
* include/ace/sysincludes.h: Added a new macro called ACE_NDEBUG
that can be used to toggle support for "live object dumping".
If this macro is enabled then
* libsrc/Misc/Dump.h: Added support for "live object dumping" into
ACE. This technique is implemented with the "External
Polymorphism" pattern described in a paper available at
http://www.cs.wustl.edu/~schmidt/EuroPLoP-96.ps.Z.
* libsrc/Threads: Added new classes called *_Process_* and
*_Thread_* for ACE_RW_Mutex, ACE_Barrier, ACE_Condition, and
ACE_Semphaore. This will allow programmers explicitly state the
scope of their locks more explicitly and will also facilitate
portability to Windows NT...
* libsrc/Threads: Updated the constructors of all the Synch and
Synch_T classes to take an option const char * called "name."
At the moment, this doesn't do anything, but when we port to
Window NT it will be used to ensure that we can name our
process-global synchronization objects.
* libsrc/Threads/Synch: Added a new tryacquire method to
ACE_RW_Mutex to be consistent with acquire and release...
* libsrc/Threads/Synch.C (ACE_Mutex): Added a new "name" parameter
to an ACE_Mutex in order to support process-semantics on NT...
* include/ace/sysincludes.h: Added a #define for EDEADLK in case
some systems don't support it (this is needed by the new
ACE_*_Token stuff).
Sun Nov 12 14:17:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Name_Server: Modified the client and server test programs
so that they can both be linked statically and/or dynamically.
If svc.conf is present then dynamic linking is used, otherwise
static linking is used. This makes it much easier to test!!!
* apps/Name_Server/client/lib/Naming_Context.C (local): Changed
things a bit so that if our server host name is "localhost" then
we assume we are local no matter what...
* apps/Name_Server: Moved directories around a bit so that all the
tests and libs for the client/server portions of the
ACE_Name_Server build correctly...
* apps/Name_Server/server: Replaced the ad hoc Name_Acceptor and
Name_Handler to use the official ACE_Acceptor and
ACE_Svc_Handler... This cleans up the code considerably...
* libsrc/Threads/Synch: Added a new wrapper for the the UNIX file
locking mechanism called ACE_File_Lock. This has the same
interface as the other locking mechanisms (e.g., ACE_Mutex and
ACE_Semaphore). Therefore, it can be used in the ACE_Guard
class!
Sat Nov 11 13:53:48 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Shared_Malloc/Memory_Pool: Improved MMAP_Memory_Pool so
that it will be smarter about remapping the file if we aren't
trying to force a fixed addr to be used for the mapping. In
particular, if we *aren't* forcing a particular address, the new
solution will be more flexible and allow the OS to determine
where to remap the memory should we need to grow the backing
store and the mapping range...
* libsrc/Misc/Set: Implemented a simple version of the
Unbounded_Set class and its iterator.
* libsrc/Misc/SString: Changed all the implementations of methods
in SString classes to use new/delete rather than
strdup()/free().
* apps/Name_Server/client/Name_Proxy: Changed rcv_reply() to
recv_reply().
* apps/Name_Server/client/Name_Proxy: Modified ACE_Name_Proxy so
that the constructor and open take an ACE_Synch_Options.
* apps/Name_Server/client/Name_Options.C (ACE_Name_Options): Added
a default for the Name_Space directory called
(ACE_DEFAULT_NAMESPACE_DIR) to the testconfig.h file...
Sat Nov 11 00:24:37 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu)
* tests/Tokens/test_token_manager/test_token_manager.C: The token
manager has a working deadlock detection algorithm.
ACE_Local_Mutex uses this to report deadlock situations.
Changes were made to ACE_Local_Mutex to fix a couple bugs which
were causing deadlock. Also, a new test application has been
added to test deadlock detection using the local mutex.
Fri Nov 10 17:16:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Mem_Map/Mem_Map.h: Changed the type of <length_> from
long to size_t.
* tests/Threads/test_thread_manager.C (main): Added a main() for
the case when there's
* tests/ASX/UPIPE_Event_Server/event_server.C (main): Fixed a
typo that was causing problems on SunOS 4.x.
* tests/Service_Configurator/IPC-tests/client/local_spipe_client_test.C:
added #include "ace/Log_Msg.h" (why was this working?!).
* include/makeinclude/rules.lib.GNU: Changed the order of operations
in rules.lib.GNU from
$(AR) $(ARFLAGS) $@ $?
-$(RANLIB) $@
-chmod a+r $@
to
$(AR) $(ARFLAGS) $@ $?
-chmod a+r $@
-$(RANLIB) $@
to keep ranlib happy on SunOS 4.x.
* apps/Time_Server: Added a Makefile
* include/ace/sysincludes.h: Removed the <termios.h> include
since it was causing major problems on SunOS 4.x...
* apps/Name_Server/Naming_Context.C: Fixed up a couple of problems
with casts. Thanks to Jack Erickson <jack@cibc.com> for
pointing this out.
Thu Nov 9 15:49:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch_T: moved Atomic_Op from ./Misc to ./Threads
and merged it into the Synch_T files. This makes more sense as
a place to put it...
* libsrc/Misc/SString.C (operator +=): Fixed a typo that would
have caused mistakes when memcpy() was used. Thanks to Prashant
Jain <pjain@wuerl.wustl.edu> for noticing this.
Wed Nov 8 22:36:51 1995 Tim H. Harrison (harrison@lambada.cs.wustl.edu)
* libsrc/Reactor/Reactor.C (TOKEN_GUARD): The reactor now uses the
TOKEN_GUARD macro. The Reactor can now be conditionally
compiled with ACE_REACTOR_HAS_DEADLOCK_DETECTION to use the new
ACE_Local_Mutex in conjunction with the ACE_Token_Manager to
detect deadlock. The deadlock detection algorithm has not yet
been implemented, but the hooks are now in place.
* libsrc/Tokens: This subdir includes ACE's new Token library.
Check out libsrc/Tokens/README for more info.
* tests/Tokens: There are a couple test applications for the new
Token library. See tests/Tokens/README for more info.
* apps/Token_Server: This directory contains some new client
interfaces to the old ACE TokenServer, now Token_Server. There
are also some example use cases included in this directory. As
always, see apps/Token_Server/README for more info.
Wed Nov 8 00:14:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/IO_SAP: Added the new classes for IO_SAP from
Gerhard Lenzer (lenzer@csaserv.erlh.siemens.de). This
eliminates UNIX I/O-specific features from ACE.
* libsrc/Misc/Set: Added a new find() method to each of the
ACE_*_Set classes...
* include/ace/sysincludes.h (ACE_ALLOC_HOOK_DECLARE): Changed
enum __Ace { __ACE } to struct __ACE {}. I think this
will cause less problems with M.I...
* libsrc/ASX/Message_Block: Added a new "allocator" parameter to a
Message_Block. This allows the memory stored by a Message_Block
to come from someplace besides the normal heap (e.g., a shared
memory segment!).
* libsrc/ASX/Message_Block.C (ACE_Message_Block): Yow, fixed a bug
in the destructor where ACE_BIT_ENABLED was being used in place
of ACE_BIT_DISABLED! I think this was causing a memory leak...
* libsrc/Reactor/Reactor: added a pair of methods that allow a
thread to set/get the notion of who "owns" the event loop. Only
the owner of the loop can do a handle_events() call. Also
changed things so that the requeue_position() are available for
both threaded and non-threaded implementations (just to have a
uniform interface...).
* libsrc/ASX/Message_Block: added a new constructor and a new
init() method that just assume ownership of a char * passed
as the parameter. Note that this does *not* set any other
fields in the Message_Block and is only used to ferry around
totally opaque data in the Message Block!
Tue Nov 7 00:52:15 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/Log_Msg/test_log_msg.C (main): Added some new tests to
make sure that op_status() and errnum() work on ace_log_msg.
Thanks to Tim Harrison for these tests.
Mon Nov 6 12:55:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Specific: Changed a couple of places in
the Thread_Specific code so that key_ is initialized to 0 and
the ts_obj * is initialized to 0. If these *aren't* 0 then
weird bugs happen on Solaris... Thanks to Tim Harrison for
noticing this and suggesting the fix!
* libsrc/Threads/Synch_T: Added an accessor method to obtain
the underlying mutex within ACE_Condition.
* libsrc/Threads/Synch.C (ACE_Process_Mutex): Added a dummy
argument of type const char * to ACE_Process_Mutex. This is in
anticipation of the info required in Windows NT to support a
named process-wide Mutex. On UNIX, this argument is ignored...
Fri Nov 3 19:02:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SOCK_SAP: Back from C++ World... Fixed a couple
of typos in SOCK_Dgram_Bcast and SOCK_CODgram that included the
*.i files multiple times... Thanks to Alex V Maclinvosky
<alexm@teltrunk1.tait.co.nz> for reporting this.
Tue Oct 31 02:12:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor: Modifed the MT_SAFE Reactor so that the
its open() method keeps track of which thread originally created
it. This thread is then considered the "owner" of the Reactor.
If a different thread tries to run the handle_events() method
then an error is returned.
* libsrc/ASX/Task.C: Added a "group id" field to the ACE_Task.
This can be used to suspend and resume a group of tasks
atomically. Also added default suspend() and resume() methods
that do just that!
* libsrc/Reactor/Reactor: Made the open() method
thread-safe. Thanks to Detlef Becker (beckerd@erlh.siemens.de)
for pointing out the need for this.
Mon Oct 30 00:02:53 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool):
Made it possible to configure the ACE_MMAP_Memory_Pool with a
(backing_store_) file name so that it is possible for multiple
processes to share one wellknown file, as well as to have
multiple pools per process. Check out the
./tests/Shared_Malloc/test_malloc.C file for an example of how
this works (try the -p -e -L10000 -t3 options).
* libsrc/Reactor/Reactor: Moved handler_i into the *.C file to
avoid problems with inline functions on HP/UX.
* libsrc/Misc/SString: Added a new class called ACE_CString. This
class is similar to ACE_WString (which has "wide character"
size), though CString has regular "char" size. Note that both
of these classes are "true" string classes, unlike ACE_SString,
which is a very simple string class that is only to be used for
very specific purposes...
* libsrc/Shared_Malloc/Memory_Pool.C (acquire): Fixed an
"off-by-one" error in ACE_MMAP_Memory_Pool::acquire() that was
causing an extra byte to be written to the backing store file...
This was causing the ./tests/Shared_Malloc/test_malloc.C program
to fail when -p was given. After this fix the test works
again... (thank God!).
Sun Oct 29 22:43:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Shared_Malloc/Malloc: Added two new classes:
ACE_Allocator and ACE_Allocator_Adapter. ACE_Allocator uses
inheritance and dynamic binding to provide extensible mechanisms
for allocating and deallocating memory. ACE_Allocator_Adapter
implements the Adapter pattern to enable ACE_Allocator to be
used with instantiations of the ACE_Malloc<> template class.
Sat Oct 28 13:51:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/ASX/Event_Server: Added a new directory called
UPIPE_Event_Server, which tests a version of the Event_Server
that is instantiated with ACE_UPIPE_* IPC mechanisms,
rather than by the ACE_SOCK_* mechanisms.
* libsrc/IPC_SAP/Addr: Created a new file called UPIPE_Addr.h.
This file contains a typedef of ACE_SPIPE_Addr to
ACE_UPIPE_Addr. The purpose of doing this is to "logically"
decouple the ACE_UPIPE* classes from the ACE_SPIPE* classes
(even though they share the same *physical* representation at
this point...).
* libsrc/IPC_SAP: Fixed a small bug in TLI_Connector.connect() and
SOCK_Connector.connect() that failed to set the
new_stream::handle_ to ACE::INVALID_HANDLE when the connection
failed. Thanks to the ever-astute Mark Patton
(mark_patton@tx72.mot.com) for noticing this.
Thu Oct 26 15:08:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/Threads: created a new test program called
test_thread_manager.C that tests the new semantics for managing
groups of threads.
* libsrc/Reactor/Signal.C (ACE_Sig_Action): Added a new method
that allows me to create a Sig_Action object that contains both
the handler and the signal to register for. This handler is
register to handle the signal in the constructor of the
object...
* libsrc/Threads/Thread_Manager: enhanced the Thread_Manager to
add support for operations (i.e., suspend, resume, kill) on a
group of threads.
* libsrc/Threads/Thread_Manager: Added a new method that allows
the Thread_Manager to resize itself automatically when it's
internal table gets full.
* libsrc/Threads/Thread_Manager: Updated the return value of
Thread_Manager::spawn() and Thread_Manager::spawn_n() so that
they return -1 on failure *and the group id* on success.
Originally, they returned 0 on success, but this new return
value is more useful since it can be used to control groups of
threads atomically.
Wed Oct 25 01:03:32 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Name_Server: Began integrating the newly donated name
server into ACE. There are a number of dependencies on
RogueWave that must be removed, but things are looking good so
far.
* libsrc/Misc/Set: Changed the name of ACE_Unordered_Set to
ACE_Fixed_Set to be consistent with the ACE Stack classes...
* libsrc/Misc/Set: Added new ACE classes called ACE_Unbounded_Set,
ACE_Bounded_Set, ACE_Unbounded_Set_Iterator, and
ACE_Bounded_Set_Iterator to deal with ACE name service
stuff.
* libsrc/Misc/SString: Added a new class called ACE_WString that
gives a very simple "wide-character" string representation for
ACE. This is needed for the ACE name service stuff.
* libsrc/Misc/SString.C (operator =): Fixed this so that ::strdup
is matched up with ::free, rather than with delete...
* libsrc/Log_Msg/Log_Msg.C (log): Updated the ACE_Log_Msg class to
store an ostream * in thread-specific storage. This can be used
in conjunction with the dump() method on each ACE class, as well
as with the ACE_ERROR and ACE_DEBUG logging macros.
Tue Oct 24 00:19:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added a definition of the dump() method to every class in ACE in
anticipation of the changes requested for Siemens.
* Changed all occurrences of ACE_Signal_* to ACE_Sig_* to make the
ACE naming of signal handling wrappers consistent.
* libsrc/Threads/Thread: Fixed some obscure bugs with the way that
ACE_Thread was compiling on platforms that don't support
threads.
* include/ace/config-irix*.h: Removed all TLI support from the SGI
platform. It seems to be totally screwed up from the tests that
I've run and there's no sense in bending over backwards to
support an IPC API that is brain-damaged to begin with...
* apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: Fixed
up the code so that the Thr_Logging_Server stuff will compile
correctly even for platforms that lack threads!
* libsrc/Connection/Strategies: Added new strategies that provide
Singleton creation and Process concurrency policies.
* libsrc/Connection/Connector.C (handle_close): Make sure that all
pending timer objects are removed from the Reactor's timer queue
when a Connector shuts down. In addition, make sure to remove
and delete all dynamically allocated ASTs, as well. Thanks to
Karl-Heinz Dorn (kdorn@erlh.siemens.de) for suggesting this.
* libsrc/Threads/Thread_Manager.C (wait): Modified wait() so that
it now takes an ACE_Time_Value *, which can be used to wait
until all threads terminate or a timeout occurs...
* libsrc/Threads/Thread_Manager: Moved Thr_Descriptor from within
the ACE_Thread_Manager class to become ACE_Thr_Descriptor at
file scope. This is in anticipation of the cool new thread
manager stuff on the way...
* libsrc: Updated every class in ACE to include a "dump" method
with the signature "void dump (void);" This method soon will be
tied into the ACE_Dump mechanism to allow all live objects in
ACE to have their state dumped automagically on-demand. This is
useful for debugging and tracing etc.
* libsrc: Updated every class in ACE to include a "Alloc hook."
This hook will enable all ACE classes to be allocated from a
particular memory pool.
* include/makeinclude/rules.local.GNU: fixed the clean target to
delete the *.rpo files (else gcc -frepo can get some crazy
errors) and combines all rm-commands for the target realclean
into one command (in some cases the last two lines do not have
any files to delete, in which case rm produces an usage
message). Thanks to John Huchinson (hutchiso@epi.syr.ge.com)
for the patch.
* libsrc/IPC_SAP/Addr/INET_Addr: Fixed all the uses of gethost*
and getserv* to use the reentrant get*_r functions if
ACE_HAS_REENTRANT_FUNCTIONS is set and ACE_MT_SAFE is set.
Thanks to Bill Tang <tang@tekats.com> for suggesting this.
* libsrc/Misc/OS: Started adding support for the POSIX *_r
functions to the OS class.
* include/ace: Added a new #define called
ACE_HAS_REENTRANT_FUNCTIONS. This indicates that the platform
supports reentrant functions (i.e., all the POSIX *_r functions
like gethostbyname_r).
Mon Oct 23 21:15:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/makeinclude/platform_irix5.3.GNU (LIBS): Removed the
link of the nsl lib since it seems not to be present on this
platform. Thanks to Karel Zuiderveld
<Karel.Zuiderveld@cv.ruu.nl> for noticing this.
* libsrc/IPC_SAP/Addr/INET_Addr.i (operator ==): Enhanced the
semantics of comparison to check both the port number and IP
address. Thanks to Mark Patton (mark_patton@tx72.mot.com) for
suggesting this.
Thu Oct 19 00:10:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/INET_Addr.C (set): Fixed a stupid bug that
failed to set errno appropriately if things go wrong with this
method. Thanks to Mark Patton (mark_patton@tx72.mot.com) for
noticing this!
Sat Oct 14 12:07:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Manager: Modified the Thread_Manager so
that even in the case where we are compiling for non-MT systems
the Thread_Manager still has the same method interface (all of
which are no-ops).
Wed Oct 11 00:12:57 1995 Douglas C. Schmidt (schmidt@mambo.cs.wustl.edu)
* Finished commenting all the classes in ACE. Updated all manual
pages accordingly.
Fri Oct 6 14:17:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/ASX/Event_Server/Event_Server: Changed
ACE_SOCK_Acceptor &sa = (ACE_SOCK_Acceptor &) *this->acceptor_;
to
ACE_SOCK_Acceptor &sa = this->acceptor_->acceptor();
Thanks to Dieter Quehl (quehl@erlh.siemens.de) for suggesting
this.
Thu Oct 5 00:22:56 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX/Map_Manager: Added a new find() method to the
Map_Manager. This method only checks for the existence of an
EXTERNAL_ID, and doesn't return the INTERNAL_ID.
* Introduced the new "trait"-based *_Connector, *_Acceptor, and
*_Stream interfaces for all the IPC_SAP classes. Basically, for
each class like
{SOCK,TLI,SPIPE,etc,}_{Acceptor,Connector,Stream}, there's now a
typedef for the appropriate type of ACE_*_Addr subclass and the
appropriate type of ACE_*_Stream class. For example, here's
what's in ACE_SOCK_Acceptor (same goes for ACE_SOCK_Connector):
class ACE_SOCK_Acceptor
{
public:
// ...
// = Traits.
typedef ACE_INET_Addr PEER_ADDR;
typedef ACE_SOCK_Stream PEER_STREAM;
};
Once C++ compilers can grok template typedefs correct, this new
approach will allow much greater simplification of code, so that
template classes like
template <class SVC_HANDLER, class PEER_ACCEPTOR, class PEER_ADDR>
class ACE_Acceptor { /* ... */
virtual int open (const PEER_ADDR &);
};
that are currently used like this:
ACE_Acceptor <My_Svc_Handler, ACE_SOCK_Acceptor, ACE_INET_Addr> acc;
can be replaced with
template <class SVC_HANDLER, class PEER_ACCEPTOR>
class ACE_Acceptor { /* ... */
virtual int open (const PEER_ACCEPTOR::PEER_ADDR &);
};
that are used like this:
ACE_Acceptor <My_Svc_Handler, ACE_SOCK_Acceptor> acc;
i.e., the ACE_SOCK_Acceptor maintains a "trait" that the
ACE_Acceptor uses to determine the appropriate addr. This is
more concise and less error-prone than the current scheme that
requires you to pass into the ACE_INET_Addr separately (ugh).
Note that the trick to making all this work is to typedef the
PEER_ADDR trait into the ACE_SOCK_Acceptor class, as follows:
class ACE_SOCK_Acceptor {
public:
typedef ACE_INET_Addr PEER_ADDR; // Trait...
};
Unfortunately, none of the C++ compilers (e.g., SunC++ 4.0.1,
G++ 2.7.0) support this stuff yet... Therefore, I've added
a set of macros that that will toggle back and forth between
whichever approach works, depending on the setting of
ACE_HAS_TEMPLATE_TYPEDEFS. Hopefully, over time compilers will
support this stuff correctly and life will become easier.
* libsrc/ASX/Message_Queue: Changed all occurrences of the S_MUTEX
and S_CONDITION macros to ACE_SYNCH_MUTEX and
ACE_SYNCH_CONDITION in order to conform to the new ACE namespace
control conventions.
* libsrc/Connection/Acceptor: Modified the Acceptor class to split
it into two classes: ACE_Acceptor (which implements a very
simple, very concise version of the Acceptor pattern, without
all the extra strategy mechanisms, etc.). These strategies have
now been factored out into a new class called
ACE_Strategy_Acceptor. The point of these changes is to "keep
simple things simple, but enable powerful extensions when
necessary." All the test programs that utilized the earlier
strategy version of the Acceptor have been updated to the the
Strategy_Acceptor instead.
* libsrc/Connection/Connector: added two new protected methods,
connect_svc_handler() and activate_svc_handler(). These methods
allow subclasses to override the Connector's strategies for
connection establishment and concurrency. In addition, it makes
the pattern much easier to explain via the Connector pattern and
also is more similar to the Acceptor.
Wed Oct 4 18:45:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Orbix-Examples/Event_Comm: Fixed the examples in this
directory so that they compile with the new ACE.
Tue Oct 3 17:33:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/makeinclude/rules.nested.GNU: Added support so that
ACE can now be built in parallel using the -jN option of GNU
make. To accomplish this, just type
% make MAKEFLAGS=-j2
on the command line and the "-j2" flag will be passed through to
the make hierarchy. Once the SunC++ compiler supports parallel
makes correctly (Template.DB causes problems) this will allow me
to tke advantage of my new dual-CPU SPARCstation 20!!!
Mon Oct 2 13:34:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection: Cleaned up some of the code related to
Time_Values * by adding a new method call time_value() to the
ACE_Synch_Options class.
* libsrc/Service_Config/Service_Record: Changed things a bit so
that we don't have to include "ace/Stream.h" in
Service_Record.h, but instead use forward decls of the
appropriate types. This breaks a circular dependency that was
causing problems for GNU C++. Thanks to John Hutchinson
(hutchiso@epi.syr.ge.com) for finding this problem.
Sat Sep 30 13:45:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Changed all uses of typedef PARENT to inherited, which is less
obtrusive.
Fri Sep 29 01:33:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc: Completed the new OS class, which will be used
shortly to remove all direct UNIX system calls in ACE.
* libsrc: Completed redocumented the header files for almost all
of ACE. The goal was to document all the methods in all the
classes. This has most been achieved (only a few minor changes
remain). The result is *much* better manual page entires in
./man/man3, as well as much more consistent header files and
overall documentation for ACE.
* libsrc/Reactor/Reactor: Changed all uses of get() to
handler_i(). Also changed the check_connections() method to
check_handles(). Note that all these changes are invisible to
apps...
Thu Sep 28 01:22:36 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/SPIPE_Addr: Changed all occurrences of
{get,set}_user_id() and {get,set}_group_id() to user_id() and
group_id() in order to be more consistent with other parts of
ACE.
* libsrc/ASX/Task.C (module): Modified the implementation of
several Task helper methods (e.g., sibling()) so that they don't
crash if there is not Module associated with the Task.
* libsrc/ASX/Stream: Removed the sync_ data member from the
private part of Stream since it didn't seem to be used for
anything.
* libsrc/ASX/Map_Manager.C (bind): Changed the type of the INT_ID
to bind() from INT_ID to const INT_ID &.
* libsrc/IPC_SAP/Addr/Addr: Moved some methods around in the *.i
file to the *.C file in order to be smarter about inlining.
* libsrc/Misc/Auto_Ptr.h: Added a new pair of classes called
"auto_ptr" and "auto_array_ptr". These implement the ANSI/ISO
C++ standard auto_ptr mechanism, which helps to write
exception-safe code. The code is based on material from Jack
Reeves (jack@fx.com) and Dr. Harald M. Mueller
(mueller@garwein.hai.siemens.co.at).
* libsrc/Threads/Synch_T.h (ACE_Null_Condition): Changed the
behavior of Null_Condition::{signal,broadcast} so that they
return 0 rather than setting errno = ETIME and returning -1.
Wed Sep 27 00:16:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch: Fixed a bug with class ACE_Barrier: count_
wasn't being set properly.
* tests/Threads/test_barrier.C (main): Fixed a stupid bug
in the ACE_Barrier -- the main function was exiting, thereby
destroying the barrier!
* tests/IPC_SAP/{SOCK,TLI}_SAP: Added test cases to exercise the
new reuse_addr feature of SOCK_Connector and TLI_Connector.
* libsrc/IPC_SAP/{SOCK,TLI}_SAP/{SOCK,TLI}_Connector: Implemented
the new behavior for reusing a local address. Also fixed a few
error cases that would have lead to descriptor leaks.
* libsrc/IPC_SAP/SOCK_SAP/SOCK.C (open): Modified a few return
values and comparisons to ease the transition to WIN32.
* libsrc/ASX/Task.C (ACE_Task): Changed the behavior of
Task::activate() so that it uses the
ACE_Service_Config::thr_mgr() Singleton if no thread manager has
been associated with a Task when it becomes an active object.
* libsrc/Service_Configurator/Service_Config: Added a new static
method to class Service_Config called thr_mgr(). This static
method behaves as a "Singleton" and provides a convenient
default thread manager that is available to all threads
throughout a process.
* libsrc/IPC_SAP: Changed all the IPC_SAP/*_SAP/*_Connector.[hiC]
files and the Connection/Connector.[Chi] class in order to add
"reuse_addr" behavior consistent with the Reactor. This enables
the client to specify that the "local_addr" should be reused
(e.g., via SOCKREUSEADDR), even if its "2 minute wait" time
hasn't elapsed yet. The libsrc/Connection/Connector.[Chi] files
were also changed to support this new interface.
* libsrc/Log_Msg/Log_Msg.C (log): Fixed a mistake in Log_Record
caused by the new thread-safe storage enhancement. The data
being logged was being rounded up incorrectly. Thanks to Daniel
Proulx (daproulx@qc.bell.ca) for reporting this.
* libsrc/Reactor/Signal.i (operator): Made a minor change to the
definition of operator struct sigaction * to work around a bug
with the HP/UX C++ compiler (lame, lame, lame)...
* libsrc/Service_Config: Changed all occurrences of
ACE_Service_Config::reactor (which was originally a globally
accessible public method of class ACE_Service_Config) to
ACE_Service_Config::reactor () (i.e., made the reactor a
Singleton implemented by a static method). This was long
overdue and will fix all sorts of niggling problems with order
of initialization since the reactor() method can do "lazy
creation" of Reactors now, i.e., create one the first time it is
referenced. In addition, changed the
ACE_Service_Config::svc_rep to ACE_Service_Config::svc_rep () in
the same manner.
* Changed all occurrences of the form:
*_Stream stream;
*_Connector con (stream, remote_addr);
if (stream.get_handle () == ACE::INVALID_HANDLE)
...
To
*_Stream stream;
*_Connector con;
if (con.connect (stream, remote_addr) == -1)
...
which is cleaner and less error prone with respect to
UPIPE_Stream (which doesn't have a valid handle once it's
connected).
* Changed all occurrences of get_handle () == -1 to get_handle ()
== ACE::INVALID_HANDLE to help smooth the move to WIN32...
* libsrc: Created a new directory called Shared_Memory and moved
the Shared_Malloc_MM and Shared_Malloc_SV classes from the
./Shared_Malloc directory to here, where they are now called
Shared_Memory_MM and Shared_Memory_SV. This is a better
name/place for them since they never really had anything to do
with malloc in the first place! What remains the Shared_Malloc
is the Malloc.* and Memory_Pool.* classes, which are typically
used for truly shared malloc/free.
* apps/Gateway/Gateway: added new logic to the Gateway to enable
it to specify which local port to bind() to.
Tue Sep 26 21:17:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Strategies.C (open): Added a return 0; at the
end of the ACE_Thread_Strategy::open method.
* tests/Service_Configurator/IPC-tests/server/Handle_Thr_Stream.C:
Made CLI_Stream a template so that we don't have to worry about
multiple includes of classes...
Mon Sep 25 01:41:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP: Revised the close() method of TLI_SAP and
SOCK_SAP so that they don't try to close down a handle that ==
ACE::INVALID_HANDLE.
* Changed all uses of ::free ((char *) ...) to ::free
(ACE_MALLOC_T (...)) to work around inconsistent prototype
problems with some compilers.
* include/ace/sysincludes.h: Changed ACE_MALLOC_TYPE to
ACE_MALLOC_T which is a bit less verbose...
* libsrc/Service_Configurator/Makefile (BUILD): Fixed the argument
to sed from -s (which is invalid) to -e (which is valid).
Thanks to Doug Ritter (dougr@guilder.datalytics.com) for
noticing this. Also used sed to do a more elegant fix on the
age-old problem of inconsistent prototypes for free() and
realloc()...
* libsrc/IPC_SAP/UPIPE_SAP: Rewrote all the UPIPE_* classes to
remove any dependencies on class UPIPE. This class appears to
be unnecessary since it mimics the behavior of class SPIPE. To
simplify the behavior of the UPIPE_* classes, they now inherit
from the SPIPE_* classes where appropriate.
* libsrc/IPC_SAP/UPIPE_SAP: Changed the semantics of the
UPIPE_Connector and UPIPE_Acceptor connection methods so that
they close down the SPIPE_Stream after a connection is
established successfully. This is important to conserve
descriptors.
* libsrc/Misc: Created a new class called OS, which encapsulates
*all* of the UNIX system calls and library routines within a
single class. The rest of ACE will program only to the methods
in this interface, which will make it much easier to port to
other versions of UNIX (and WIN32!).
Sun Sep 24 11:49:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SOCK_SAP: Conditionally compile the LSOCK_* stuff
if the OS platform (e.g., Linux) doesn't support it.
* Changed all occurrences of ACE_HAS_NO_... to ACE_LACKS_... in
all the config*.h files and the headers/source. This reads
better...
* Changed all uses of (1) Acceptor::peer_acceptor_ to
Acceptor::acceptor(), (2) Svc_Handler::peer_ to
Svc_Handler::peer(), and (3) Connector::peer_connector_ to
Connector::connector() to make the code more abstract and
resilient to future changes.
* include/ace/sysincludes.h: Added a new macro called
ACE_NEW_RETURN that provides a useful abstraction for
expressions involving operator new since we can change memory
allocation error handling policies (e.g., depending on whether
ANSI/ISO exception handling semantics are being used).
* libsrc/Threads/Thread.C: Changed things a bit so that if
ACE_MT_SAFE == 0 then Thread::self() returns 1, regardless of
whether the platform supports threads.
* Went through the entire library and (hopefully) made sure that
all calls to global system calls and library routines are
prefixed with "::".
* libsrc/Misc/Get_Opt.C: Changed this class to use the Log_Msg
logging mechanism rather than stderr...
* tests/Misc: Added a new test program to test the Profile_Timer.
* tests/Reactor/misc: Added a new test program to test the
Handle_Set.
* libsrc/Service_Configurator: Changed the error messages in
Svc_Conf.y and Svc_Conf.l to go to the ACE Log_Msg logging
mechanism rather than stderr...
* libsrc/Connection/Acceptor: Modified the Acceptor and
Oneshot_Acceptor classes so that they take advantage of the new
ACE_Creation_Strategy, ACE_Accept_Strategy, and
ACE_Concurrency_Strategy components. This will make is easy to
define Acceptors that can be flexibly configured to use various
creation strategies (e.g., dynamic linking, singletons, dynamic
memory creation, etc.) for making Svc_Handlers.
* libsrc/Connection/Svc_Handler: Added several new classes --
ACE_Creation_Strategy, ACE_Accept_Strategy, and
ACE_Concurrency_Strategy -- that form the heart of the new
ACE_Acceptor implementation. These classes define the creation,
passive connection acceptance, and concurrency strategies
employed by the Acceptor factory when it receives a connection
from a client.
* libsrc/Connection/Acceptor: Modified the implementation of the
Acceptor and the Oneshot_Acceptor. These classes are no longer
related by inheritance since they behave in fundamentally
different ways and sharing code was making it hard to write and
use these classes correctly.
* libsrc/Misc/Misc: Moved the enum INVALID_HANDLE from IPC_SAP.h
to Misc.h since this is actually more general than just the
sockets stuff and we need to be portable to WIN32... Therefore,
any code that originally said ACE_IPC_SAP::INVALID_HANDLE should
now be ACE::INVALID_HANDLE.
* Removed the ACE_OMIT_SERVICE_CONFIGURATOR flags. These are
annoying -- anyone who wants to subset ACE should be responsible
for doing this stuff.
Fri Sep 22 22:36:33 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Spawn.C: Greatly simplified the
implementation of Thread_Spawn by leveraging the new class Task
semantics for activate(). Now, all the concurrency activation
mechanisms necessary to create active objects are associated
with a Task and all the Thread_Spawn needs to do is to define a
new make_svc_handler() Factory Method to create a SVC_HANDLER
and activate it!
* libsrc/ASX/Task.C: Tightened up the semantics of Task::activate
(which turns a passive object into an active object, i.e., one
with its own thread). Now, if an object is activated more than
once it ignores the other requests, unless the force_active
parameter is enabled. Moreover, activate() now takes a
parameter that indicates the number of threads to allocate for
the Task. This makes it simple to have a "thread pool"
associated with a Task.
Thu Sep 21 00:49:55 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/Connection: Updated the CPP-acceptor and CPP-connector to
use the underlying Acceptor and Connector patterns more
robustly. Also added new hooks to include a Service_Config
component so that integrating this with the ACE dynamic linking
scheme will be a snap!
* libsrc/Connection/Acceptor.C: Revised the Oneshot_Acceptor to be
robust in situations where it isn't given a Reactor *...
* apps/Logger: Fixed a couple of minor problems with *.i files
being included when __INLINE__ is set. This should help G++
compiler ACE better...
* libsrc/Reactor/Reactor: Enhanced the Reactor::notify() method so
that it takes both an Event_Hander * and a Reactor_Mask, which
it passes to the Reactor's main event loop thread via the pipe.
The event loop thread uses this mask to determine which method
to invoke. This new feature is due to the insight of Karl-Heinz
Dorn (kdorn@erlh.siemens.de).
* libsrc/Connection/Connector: Fixed a braino in
Connector::handle_output, which was using ::getpeername() to
check whether a connection has been established with a peer.
Naturally, this only works for sockets, and doesn't work at all
for TLI or SPIPEs...
* libsrc/IPC_SAP/Addr/SPIPE_Addr.C (set): Changed the return type
of this method to "int" in order to conform to the types
expected by the Acceptor/Connector patterns.
* Removed all uses of the global scope "::" for all variables and
methods that are not UNIX system calls or library calls in
preparation to change over to the new OS class (requested by
Siemens).
Wed Sep 20 14:39:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SPIPE_SAP: Renamed the SPIPE_IO classes to
SPIPE_Stream to be consistent with the other parts of the ACE
library. Updated all parts of the library to reflect this
change.
* tests/Service_Configurator: Moved the current contents of this
directory into a new directory called IPC-tests. Created a new
directory called Connection-tests where the dynamic linking
examples for Siemens will go.
* libsrc/Reactor/Signal: Made a bunch of minor changes to support
signal handling on SunOS 4.x platforms. Thanks to Aniruddha
Gokhale <gokhale@cs.wustl.edu> for help with this.
* libsrc/Threads/Synch.h: Modified the #ifdefs a bit so that
Synch_T.h gets included regardless of whether ACE_HAS_THREADS.
* libsrc/Threads/Synch_Options: Added a new set() method to make
it possible to initialize the Synch_Options from outside the
constructor.
* libsrc/Connection/Svc_Handler.C: Added checks within the
ACE_Svc_Handler so that if we are given a NULL Reactor we don't
crash!
* libsrc/Mem_Map: Tidied up this class and added comments to the
header so that the class2man has something to generate manual
pages from!
* libsrc/Misc/Misc: Added a new method called "round_to_pagesize",
which was previously in Mem_Map. This is a better place for it
since other parts of ACE (e.g., Shared_Memory) use it.
* libsrc/Misc/Misc: Added a new method called "get_file_size",
which was previously in Mem_Map. This is a better place for it
since other parts of ACE might want to use it.
Tue Sep 19 00:24:41 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released a beta version of ACE 3.3.1 for G++ testing.
* libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram.C: Removed a stray INLINE
that was causing problems for G++. Thanks to E. Jason Scheck
<jasons@ims.com> for reporting this.
* libsrc/IPC_SAP/Addr/INET_Addr: Improved the documentation for
this class and also added new semantics to the constructor and
set() method so that a "ip_addr:port_number" tuple can be given
as a single string (e.g., "1234:tango.cs.wustl.edu" or
"1234:128.252.166.57"). This is useful since it gives a uniform
interface for addressing for Internet domain, UNIX domain, and
SPIPE domain addresses... Updated the ./tests/Connection tests
to use this form (which is nice since now they are all very
orthogonal!)
* tests/Connection: Created a whole new suite of tests that
exercise the connection patterns for all of the relevant IPC
mechanisms (e.g., SOCK_SAP, TLI_SAP, SPIPE_SAP, and UPIPE_SAP).
* bin/clone.C: fixed the first #include so that it uses #include
"ace/sysincludes.h". Thanks to Alex V Maclinvosky
<alexm@teltrunk1.tait.co.nz> for noticing this.
Mon Sep 18 01:52:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX/Message_Queue.C (close): Fixed yet another problem
with variables being defined in for loops. G++ is good for
detecting this ;-).
* libsrc/Threads: Moved all the template classes from Synch.* into
Synch_T.* in order to make it possible to compile templates with
G++. Thanks to E. Jason Scheck <jasons@ims.com> for suggesting
this.
* libsrc/IPC_SAP/UPIPE_SAP: Make a number of changes to ensure
that all the UPIPE_SAP classes conform to the same interface as
all the other ACE IPC classes.
* Changed all occurrences of THR_FUNC to ACE_THR_FUNC to protect
the global namespace better.
Sun Sep 17 13:36:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/ASX/Message_Queue: Fixed a typo in these test programs
that caused a segfault since a vararg parameter was omitted on a
call to the Log_Msg::log() method. Maybe iostreams isn't so bad
after all... ;-)
* apps/Logger/Service_Configurator_Logger/Thr_Server_Logger: fixed
a stupid error that was caused by some mods I made after ECOOP
to update the threaded logging server. When I changed the
Thr_Logging_Acceptor so that it no longer inherited from the
Logging_Acceptor I forgot to redefine the init() method...
* man: Totally regenerated the ACE manual pages using the new
versions of the OSE tools provided by Karl-Heinz Dorn
(kdorn@erlh.siemens.de).
* Changed all occurrences of MT_SYNCH and NULL_SYNCH to
ACE_MT_SYNCH and ACE_NULL_SYNCH, respectively. This is
consistent with the ACE naming conventions and had been an
oversight when I renamed everything earlier.
* Fully built and tested ACE with the __INLINE__ flag enabled.
This will generate code with many small methods in the library
inlined. Had to fix a bunch of minor things to allow this to
work without compilation-order dependency problems.
* libsrc: Made a bunch of changes to the way that header files are
included internally to ACE in order to break compilation-order
dependencies. This is necessary to support GNU G++'s lame
handling of templates. None of this stuff should affect
application code.
* tests: Added a whole new slew of tests for the remaining parts
of ACE that weren't currently included in ./tests. This stuff
exercises ACE components like the Log_Msg logger and factors all
the #if defined (DEBUGGING) code out of the ./libsrc directory
tree and puts it in the ./tests directory tree, where it
belongs.
* Changed all uses of the error macros LM_* to ACE_* in order to
avoid name collisions with other libraries, frameworks, and
toolkits. In addition, changed all uses of the error enumerals
LOG_ to LM_ in order to avoid a conflict with system #defines in
<sys/syslog.h>.
In order to change these automatically, I used the following
UNIX command sequence:
% find . -type f -print | xargs perl -p -i -e 's/LM_/ACE_/g'
% find . -type f -print | xargs perl -p -i -e 's/LOG_/LM_/g'
Sat Sep 16 11:55:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* tests/Threads: Added a new test for Thread_Specific storage.
* Added a new platform/compiler configuration flag called
ACE_TEMPLATES_REQUIRE_SOURCE that must be set for compilers
(e.g., GNU G++) whose template mechanism must be able to
see the source code (i.e., the *.C files). Changed *lots* of
header files to enable this... Also had to change the
corresponding *.C files so that they wouldn't get included
twice...
* libsrc/Connection: redid the implementation of Acceptor,
Connector, and Svc_Handler to get more control over the scope of
#defines like #define SH SVC_HANDLER, etc.
* libsrc/Threads/Thread_Spawn: Totally redid the implementation of
Thread_Spawn to use the Acceptor class template. This greatly
reduces the amount of code to implement the Thread_Spawn!
* libsrc/Threads/Thread_Spawn: Moved the Thread_Spawn
implementation into the ./libsrc/Threads directory rather than
in the ./libsrc/Service_Configurator directory since it deals
with threading and thus belongs in the other place.
Fri Sep 15 00:25:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Token.i (tryacquire): Added a cast to fix passing
a const pointer to a function that was expecting a non-const.
Thanks to E. Jason Scheck <jasons@ims.com> for reporting this.
* libsrc: Added a bunch of changes to enable G++ to compile ACE.
A lot of this involves moving around info in header files so
that templates can be dealt with using the relatively lame GNU
C++ repository scheme. Thanks to E. Jason Scheck
<jasons@ims.com> for all his help in this.
* libsrc/Synch: created Synch_Options.C out of Svc_Handler.C, so
that Svc_Handler.C could be "template pure"; all the other files
were already separated. Thanks to E. Jason Scheck
<jasons@ims.com> for recommending this.
* Makefile (clone): Added a tiny fix that solves a weird problem
that arises with symbolic links on HP/UX. Thanks to Jam Hamidi
(jh1@osi.com) for tips on how to fix this.
Thu Sep 14 10:55:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Gateway/Gateway/Channel.C (route_message): Updated the main
routing code to check for whether a channel is_active()
(i.e., is actually connected) before trying to send messages
to it. This was originally done in the Set class iterator, but
I revised that to make it more reuseable and to workaround bugs
in the HP/UX compiler so I had to update the main code...
* libsrc/Threads/Thread_Specific: Added a new method to called
ts_object () to class ACE_Thread_Specific that get the
thread-specific object for the key associated with this object.
Returns 0 if the data has never been initialized, otherwise
returns a pointer to the data. This is useful since now you can
query a thread-specific storage mechanism to see if there's ever
been a thread-specific object created *without* having to
actually create one if one hasn't been created yet! Thanks to
Detlef Becker (beckerd@erlh.siemens.de) for pointing this out.
* include/makeinclude/platform_sunos5_sunc++_orbix.GNU (LIBS):
Changed the default compilation strategy for SunOS 5.x machines
to use -mt. This seems to be necessary to build robust
libraries that are thread-safe. Thanks to Phil Mesnier
<phil@yakko.envision.com> and Chris Cleeland
<chris@envision.com> for hounding me until I changed the
existing solution. If you *don't* want this behavior you need
to remove -mt from the platform_macros.GNU file and and remove
the ACE_HAS_THREADS and ACE_MT_SAFE flags, etc. from the
config-sunos5.*.h files.
* libsrc/Shared_Malloc/Memory_Pool.C (ACE_MMAP_Memory_Pool): Added
a new parameter to the constructor called write_each_page that
if enabled forces a write to each page to ensure that space is
allocated from the file system (otherwise, we can end up failing
due to optimisitic resource allocation...). Thanks to Phil
Brooks <phil_brooks@mentorg.com> for detecting this issue and
implementing a solution.
* include/ace/sysincludes.h: Added #ifdef support for HP/UX, which
fails to properly wrap <sys/mman.h> with an extern "C" block.
Mon Sep 11 01:39:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Connector.C (handle_input): Changed the call
to Svc_Handler::close() to accept the default value of 0 rather
than -1... Thanks to Mark Seaborn
<mseaborn@itthp1.comm.mot.com> for noticing this.
* libsrc/Connection: Changed all uses of ADDR to PEER_ADDR to
avoid a name clash in Linux... Thanks to James Morris
<jmorris@aurora.apana.org.au> for finding this.
Sun Sep 10 03:56:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Synch: Added support for "barrier
synchronization" to ACE in the form of ACE_Barrier. Thanks to
Bruce Worden (bruce@betsy.gps.caltech.edu) for suggesting this
and pointing me in the right direction.
* tests/Threads: Added a test for the new barrier synchronization
mechanism.
Sat Sep 9 11:58:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor: Changed Reactor::max to Reactor::max3 to
avoid problems with conflicting names of macros in Sun header
files!
Mon Sep 4 14:34:52 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Signal: The new ACE_Signal_Handlers mechanism
appears to be working! There's a test in ./tests/Reactor/misc
called test-signal.C that illustrates how all this works.
* libsrc/Reactor/Signal: Added several new methods to
ACE_Sig_Action to make life easier to implement the new
ACE_Signal_Handler code...
* libsrc/Reactor/Signal.C (ACE_Sig_Action): Changed the order of
the arguments to the ACE_Sig_Action constructor. It's almost
always the case that you want to vary the SignalHandler, but
only rarely do you want to vary the mask or flags. By
reordering this, it's easier to get the correct default values
without adding extra junk...
Mon Sep 4 01:11:29 1995 Tim Harrison (harrison@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SOCK_SAP/SOCK_Dgram_Multicast: added support to
allow a port to be reused for multicast sockets. This is useful
if you are multicasting to multiple processes, some of which are
on the same host!
* libsrc/ASX/Map_Manager: Fixed an odd bug that must have gone
undetected for a long time somehow. Basically, the "is_free_"
field of the ACE_Search_Structure struct was never being set to
it's correct initial value of 1. I don't know how this didn't
surface before... At any rate, it is fixed now...
* include/ace/sysincludes.h: Changed the inline methods for
SET'ing and CLR'ing bits to be macros in order to get cheap
polymorphic behavior... Also changed them to use the prefix
"ACE_" to avoid namespace pollution. Changed all dependencies
in the source code (only a few...).
* libsrc/Reactor/Signal: Added a new class called
ACE_Signal_Handlers, which subclasses from ACE_Signal_Handler.
This new class implements the semantics required for Siemens.
For example, this class allows multiple signal handlers to be
registered for the same signal. It also makes SA_RESTART the
default mode. Note that by default, the Reactor uses the
original ACE_Signal_Handler semantics. If you want the new
semantics, simply pass the Reactor a pointer to
ACE_Signal_Handlers.
* include/ace/sysincludes.h: Removed the automatic inclusion of
./libsrc/Misc/Misc.h from sysincludes.h since this was causing
problems with include file ordering.
Sun Sep 3 00:22:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Signal.C (remove_handler): Moved a definition of
ACE_Sig_Action out of an inner block to avoid portability
problems.
* libsrc/ASX/Map_Manager: Improved the documentation of this class
and fixed up a couple of problems with the scope of loop
indexes.
* libsrc/Misc/{Stack,Set}: Added this new file that contains a set
of Stack and Unordered Set implementations. The Unordered Set
is used in various places in ACE (e.g., libsrc/Reactor/Signal
and apps/Gateway/Gateway/Routing_Entry).
* libsrc/Log_Msg/Log_Msg: Moved the definition and declaration of
Thread_Specific<Log_Msg> ace_log_msg from this directory to
./libsrc/Misc/Misc.h in order to cleanup the namespace and also
to help make this work on DEC platforms...
* libsrc/Reactor/Signal: Changed ACE_Signal_Handler from a static
class to a non-static class in order to allow subclassing. This
is necessary to support the Siemens requirements.
* libsrc/Shared_Malloc/Memory_Pool: Modified ACE_MMAP_Memory_Pool
so that it no longer stores the name of the backing store in a
static character array (which made it impossible to have more
than one of these at a time...). The new version stores the
name in each ACE_MMAP_Memory_Pool object. It also selects a
name that won't conflict with other names by using ::mktemp.
* tests/Shared_Malloc/test_malloc.C (parse_args): Fixed two stupid
omissions of "break" when parsing command-line arguments. Isn't
C++ great?! (NOT)...
* apps/Synch-Benchmarks: Came up with a killer solution to the
nagging problem of POSIX Pthread's lack of an integral thread id
(a la Solaris threads thr_self()). The solution leverages off
of our new ACE_Thread_Specific wrapper to provide the necessary
functionality. Thanks to Reginald S. Perry (perry@zso.dec.com)
for triggering the thoughts that lead to this solution...
Sat Sep 2 17:00:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/TLI_SAP/TLI_Acceptor: Changed the implementation
of ACE_TLI_Acceptor so that ACE_TLI_Request is defined inside
the TLI_Acceptor.C file (this is the so-called "Cheshire Cat"
technique). This clean up the code and the global namespace a
bit.
Fri Sep 1 00:53:47 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released new version of ACE 3.3
* libsrc/IPC_SAP/UPIPE_SAP/UPIPE.C: Fixed a small problem with
failing to #ifdef this file correctly if we don't have
threads... Thanks to John Morey (jmorey@hitel.com) for
reporting this.
* tests/ASX/CCM_App/svc.conf: Fixed the svc.conf file so that it
looked in the .shobj directory rather than the .obj directory.
* Released new version of ACE 3.2.9...
* libsrc/Log_Msg/Log_Msg: Added a new field called "restart_" to
the thread-specific storage. This will be used to control
whether system calls are restarted when interrupted.
* Changed inheritance syntax from
class xxx
: public yyyy
{
};
to
class xxx : public yyyy
{
};
so that the OSE tools would work correctly.
Thu Aug 31 00:12:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/UPIPE_SAP: Changed all uses of UPIPE_Addr to
SPIPE_Addr since they were the same thing. This also allows
much reuse of code...
* libsrc/IPC_SAP/{TLI_SAP,SOCK_SAP,SPIPE_SAP}: fixed the
"complete" method for these classes so that it uses the new
ACE::handle_timed_complete() method in libsrc/Misc. This cleans
up the code by merging common logic.
* libsrc/IPC_SAP/{DEV_SAP,FILE_SAP,SPIPE_SAP}: fixed the "connect"
method for these classes to conform to the API used by the
SOCK_SAP and TLI_SAP wrappers. In addition, cleaned up the code
so that common logic was pushed into a new method in libsrc/Misc
called ACE::handle_timed_connect().
Wed Aug 30 00:20:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Acceptor.C (open): Fixed this method so that
it returns a value on all paths through the code...
* libsrc/IPC_SAP/TLI_SAP/TLI.C (ACE_TLI): Moved the option
allocation code from the TLI::open() method into the TLI
constructor in order to make sure it is always called!
* libsrc/IPC_SAP/DEV_SAP/DEV_Connector: Changed the signature of
the DEV_Connector::connect method to allow users to specify
flags, permissions, and timeouts (this is now consistent with
other parts of ACE).
* libsrc/IPC_SAP/FILE_SAP/FILE_Connector: Changed the signature of
the FILE_Connector::connect method to allow users to specify
flags, permissions, and timeouts (this is now consistent with
other parts of ACE).
* tests/IPC_SAP/TLI_SAP: Updated the test code to check the new
timer support for connection establishment.
* libsrc/IPC_SAP/TLI_SAP: Updated the code to make it conform to
the interfaces provided by SOCK_SAP. This primarily affected
the TLI_Acceptor and TLI_Connector classes in order to add
support for timed connects and accepts.
* libsrc/Reactor/Signal.C: Modified Signal_Handler::dispatch so
that it saves/restores errno to prevent it from being corrupted
by the handle_signal callback. Thanks to Detlef for suggesting
this.
* libsrc/Shared_Malloc/Memory_Pool: Changed the name of
ACE_Local_Memory_Pool to ACE_Sbrk_Memory_Pool. Then added a new
version of ACE_Local_Memory_Pool that uses the C++ operator new
to acquire chunks of memory. This enables the ACE Malloc class
to integrate with existing programs that use new/delete. Thanks
to Karlheinz for suggesting this.
* libsrc/IPC_SAP: Added the UPIPE mechanism donated by SIEMENS.
This provides an intra-process IPC mechanism that has the same
API as the interprocess and network mechanisms.
* Reran catman on ./man/windex. Thanks to Dieter Quehl
(quehl@csaserv.erlh.siemens.de) for reporting the need for this.
* Released new version of ACE 3.2.9...
* tests: Fixed a bunch of minor problems that occurred when
building on HP/UX. Thanks to John Morey
(jmorey@hitel.com) for reporting these.
* apps/Gateway/Gateway/Peer_Message.h: Changed the default values
of the parameters to Peer_Addr so they aren't trying to assign
negative values to unsigned chars! Thanks to John Morey
(jmorey@hitel.com) for noticing this...
Tue Aug 29 18:52:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Thread/Thread_Specific: Changed the constructor so
that it will take an initial TYPE *, which will be used to
initialize the thread-specific object. This is necessary to
support the changes to ACE_Task described in the following
bullet.
* libsrc/ASX/Task: Added a new class called ACE_Task_Exit to
Task.C. This class is used in conjunction with
ACE_Thread_Specific to keep exit information for a Task in
thread-specific storage. This ensures that the Task::close()
method will get called no matter how the thread exits (e.g., via
Thread::exit() or by "falling off the end of Task::svc_run").
Mon Aug 28 09:54:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released new version of ACE 3.2.9...
* libsrc/Reactor/Handle_Set.C: changed the type of MSB_MASK from
u_long to ACE_UINT32 to handle problems with the Alpha's 64 bit
longs...
* libsrc/Threads/Thread_Specific: Continued to try and get this
class to build correctly on other platforms... I think I've
just about got it working right now...
* libsrc/IPC_SAP/IO_SAP/IO_SAP: Added installation flags that
indicate whether the platform has terminal ioctl flags like
TCGETS and TCSETS. I know that SunOS 5.x has these, but I'm not
sure about other platforms...
Sat Aug 26 13:55:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released new version of ACE 3.2.9...
Fri Aug 25 09:05:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Specific.h: Fixed a typo that was causing
this file to fail on HP/UX. Thanks to Neil Cohen
(nbc@metsci.com) for finding this!
* libsrc/IPC_SAP/DEV_SAP/DEV_IO: Added conditional support for
getmsg/putmsg calls in the DEV_IO class. This will make things
work correctly for platforms that don't support SVR4 STREAM
pipes.
* libsrc/IPC_SAP/FILE_SAP/FILE_IO: Added the same fixes to FILE_IO
that I added to DEV_IO...
* include/ace/sysincludes.h (MAXNAMELEN): Fixed a typo in
sysincludes.h that caused problems for the G++ compiler.
* libsrc/Connection/Acceptor.C (handle_close): Removed a
diagnostic message that was getting printed if a
Oneshot_Acceptor had already been removed from the reactor (it's
ok for this call to fail). Thanks to Irfan Pyarali
(ip1@cec.wustl.edu) for noticing this!
* libsrc/ASX/Task.C (ACE_Task): Fixed a bug in the constructor
that prevented a Message_Queue from being allocated
automagically.
Thu Aug 24 16:47:14 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/ace/sysincludes.h: added support for 64 bit machines so
that Internet addresses are 32 bits, as they must be!
* libsrc/Shared_Malloc/Malloc: Changed things so that MALLOC_STATS
is now *off* by default... (also changed the name to
ACE_MALLOC_STATS).
Wed Aug 23 15:21:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/ace/config-osf1.h: Added support for thread-specific
storage. Please let me know if this breaks on OSF/1!
* libsrc/Threads/Thread: Added support for the thread-specific
storage wrappers for both Pthreads and Solaris threads. Also,
rearranged some of the code to emphasize similarities between
Pthreads and Solaris threads.
* libsrc/Threads/Thread_Specific: Updated this to remove "static"
from all the data members in this class since those should be
specific to an *instance* rather than to an instantiation of the
particular template class. Tim claims this works...
* libsrc/Threads/Token.C: Fixed a couple of typos that misspelled
"assert" (jaysus...). Thanks to David Trumble
(trumble@cvg.enet.dec.com) for noticing this.
* libsrc/Threads/Token.C (release): Fixed a very stupid bug that
was causing the Token never to become "unused"... No excuses
for this, except that Pthreads is partly responsible ;-)
Tue Aug 22 11:36:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX/Task: Changed the behavior of task so that it doesn't
try to delete the Message_Queue or Thread_Manager if it didn't
allocate them! Thanks to Karl-Heinz Dorn
(kdorn@erlh.siemens.de) for suggesting this fix.
* libsrc/ASX/Message_Block: Changed the semantics for
Message_Block::end() so that it returns a pointer to 1 past the
end of the data. This is more consistent with toolkits like
STL. Also changed the behavior of Message_Block::copy() so that
it checks to make sure the data will fit in its buffer.
* tests and apps: Revised a bunch of files to add #ifdef so that
TLI tests and apps are not compiled if the platform doesn't
support it...
* Fixed a bunch of minor problems for HP/UX (which lacks TLI and
other common OS features). Thanks to Mark Seaborn
(mseaborn@itthp1.comm.mot.com) for noticing these.
Mon Aug 21 00:19:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc: Changed the name of the class Argument_Vector to
ACE_ARGV. This is a bit more concise... UNIX programmer will
know precisely what argv is...
* Updated all of ACE to use the new naming scheme, which prepends
all ACE classes with "ACE_". This is an important change since
it prevents ACE from polluting the namespace of applications
(unless they also prefix "ACE_" in front of their classes, which
is not very likely!).
Since this change basically affects every single file in the
entire release, as well as all existing user code I've written a
perl script called "rename-ace.pl" to automate all of this.
This script is in $WRAPPER_ROOT/bin. To use it, simply type:
% find . -type f -print | egrep '[Chi]$' | xargs rename-ace.pl
Note that you will need to change the first line of
rename-ace.pl to point it to whereever perl is located on your
system.
I've tested this on the entire ACE source code base and it seems
to work fine. Please be careful using it on your code, however,
since it may conflict with names that you use. When in doubt,
remove the '-pi' from the first line of the rename-ace.pl perl
script and replace it with '-p' (which is non-destructive).
Then run the commands above and check the output carefully.
When you're convinced that everything is ok, add the '-pi' back
again. Let me know immediately if you find any problems with
this scheme!
* libsrc/Connection/Acceptor.C: Added a virtual destructor to the
Oneshot_Acceptor to make sure that descriptors are closed down
correctly. Thanks to Irfan (irfan@wuerl.wustl.edu) for
suggesting this.
* libsrc: Change all occurrences of Shared_Memory to
SV_Shared_Memory to firmly indicate the origins of this
wrapper...
Sun Aug 20 23:12:03 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP: added the IO_SAP, DEV_SAP, and FILE_SAP
components donated by SIEMENS to the ACE release.
* libsrc/ASX: Split the Message_Queue.* files into Message_Block.*
and Message_Queue.* in anticipation of the Windows NT port...
Fri Aug 18 13:54:09 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Specific: Move the operator->()
method back into the *.C file in order to make HP/UX
happy...
* apps/Gateway/Peer: Removed the Options.* files since they
weren't being used and they were causing problems on OSF/1...
* libsrc/Misc/Profile_Timer: Factored common code together by
making a new typedef called Rusage that defaults to either
struct rusage or prusage_t, depending on installation flags.
Fixed a couple places in the code that were depending on the
prusage_t type (which is now the Profile_Timer::Rusage type...).
Thu Aug 17 14:31:11 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Connector.h: Changed some typedefs in order to
keep the Centerline compiler from crapping out. I can't
*believe* how screwed up that compiler is when it comes to
templates...
* Released new version of ACE 3.2.9...
* libsrc/Threads/Synch: Fixed a bunch of typos that showed up
on OSF/1. Also tried to fix some other problems by removing
"const" from all the methods...
Wed Aug 16 22:26:24 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Thread_Specific.h: Fixed another stupid bug
caused by a braino that failed to unconditionally include
Thread_Specific.i. Stuart Powell found this also... (thanks!).
* libsrc/Threads/Thread_Specific.h: In Thread_Specific.h the
inlining macros were only included if threads were used. This
obviously didn't work for people without threads... I
moved the #endif for ACE_HAS_THREADS... back before the #ifdef
__INLINE__ stuff (e.g. to line 71). Thanks to Stuart Powell
(stuartp@ot.com.au) for suggesting this.
* libsrc/Threads/Synch.h: Fixed a typo that manifested itself for
pthreads: Condition count_nonzero_ should obviously be
Condition<Mutex> count_nonzero_. Thanks to Rob Clairmont
(rclairmo@bnr.ca) for reporting this.
Tue Aug 15 00:31:44 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Log_Msg/Log_Msg.C (log): Fixed a stupid typo (*format++
should have been format++...).
* libsrc/Misc/Trace.h: Move the class TSS_Int from within class
Trace to file scope and changed the name to ACE_TSS_Int to
handle problems with the HP/UX compiler.
* include/ace/sysincludes.h: Added the word "struct" in front
of rusage to make things work on HP/UX. Thanks to Neil Cohen
(nbc@metsci.com) for reporting this fix.
* apps/TokenServer/server/TokenMap.C: Fixed yet another problem
with scope of variables defined in for loops...
* Released new version of ACE 3.2.9...
* libsrc/Connector: Fixed a braino whereby I didn't use consistent
naming for my #defines (PA should have been PRC). Thanks to
Alex (alexey@ace.elektra.ru) for noticing this.
Mon Aug 14 18:13:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SPIPE_Acceptor: Modified the interface of open()
and accept() so they would conform to the SOCK_Acceptor and
TLI_Acceptor. This makes it possible to use SPIPE_Acceptor in
similar situations (e.g., Acceptor and Connector patterns).
* libsrc/ASX/Stream: Fix a bug that occurred when trying to dump()
a linked Stream.
* libsrc/Connection/Acceptor: Moved the body of the init() method
out of this class since it was unnecessarily dependent on the
INET_Addr domain addressing types. This required changes to the
./apps and ./tests directory in order to add the init() method
to classes that used the default behavior.
* libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Acceptor.C: Fixed close() so that
it will call fdetach(2) *before* closing down the descriptor. I
hope this will fix a problem noticed by people at SIEMENS.
* tests/ASX/Event_Server/Event_Server/Options: Fixed a problem
with the default port numbers (they weren't using the values
from ./include/ace/testconfig.h).
* include/ace/sysincludes.h (MAXNAMELEN): If MAXNAMELEN is not
defined by a platform then ACE sets it to be FILENAME_MAX,
which should be defined in stdio.h. Thanks to Todd Blanchard
(tblancha@evolving.com) for this suggestion.
Sun Aug 13 17:02:57 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Service_Configurator/Parse_Node: Changed the name of
Function_Node::symbol (const void *) so that it won't give
those annoying warnings anymore...
* libsrc/Reactor/Handle_Set: Moved the definition of MSB_MASK from
the header file into a static const within the .C file in order
to avoid overflow problems on certain compilers.
* libsrc/Threads/Synch: Implemented bare-bones versions of
Semaphore and RW_Mutex for the POSIX Pthreads wrappers so that
they'll be more compatible with the Solaris threads wrappers.
The semaphore implementation uses a Condition object and a
Mutex, which should be a reasonable solution. The RW_Mutex is a
cop-out for now and just uses a Mutex (i.e., no extra
parallelism for readers...). If anyone has a good
implementation of RW_Mutex that they'd like to share please let
me know.
* libsrc/Threads/Thread_Specific: Fixed the prototypes for copy
constructor and operator=, which were broken... Thanks to Alex
(alexey@ace.elektra.ru) for noticing this.
* libsrc/Shared_Malloc/Memory_Pool.C: Added some casts to
MAP_FAILED to handle OSF/1. Thanks to Alex
(alexey@ace.elektra.ru) for noticing this.
* libsrc/Threads/Token: Fixed things so that threads waiting for a
token wouldn't get screwed up by signals that occur...
* include/ace/sysincludes.h: Changed the #ifdef
ACE_SELECT_USES_LONG to ACE_SELECT_USES_INT for HP/UX since
believe it or not, it really does use int, not long!
* libsrc/SV_Semaphores: Fixed some weird problems that the HP/UX
compiler was having when trying to inline methods in this class.
As a consequence, I've rearranged the class to avoid inlining
non-trivial methods. Thanks to John Morey (jmorey@hitel.com)
for reporting these problems.
Wed Aug 9 01:29:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Token: Added a tryacquire() method to become
interface compliant with other LOCK mechanisms.
Sat Aug 5 09:18:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection: Fixed a couple of bugs when using
the Acceptor and Svc_Handler when ACE_OMIT_SERVICE_CONFIGURATOR
is enabled. Thanks to Stuart Powell (stuartp@ot.com.au) for
bringing this to my attention.
* include/ace/sysincludes.h: Added a #ifdef for MAXNAMELEN to
handle systems (like HP/UX) that don't support it.
Thu Aug 3 22:59:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released new version of ACE 3.2.9...
* libsrc/Reactor/Time_Value.i (normalize): Added new code to
perform normalization of Time_Values. Thanks to Hans Rohnert
(Hans.Rohnert@zfe.siemens.de) of SIEMENS for the suggestion.
Tue Aug 1 00:19:00 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Changed all code that used Log_Msg::log() directly to use
LM_ERROR or LM_DEBUG. This will ensure that logging will work
with the new thread-specific storage implementation.
* libsrc/Threads/Thread_Manager.i (open): Fixed this method so
that it is thread-safe when a Thread_Manager is resized.
* libsrc/ASX/Map_Manager.i (open): Fixed this method so that it is
thread-safe when a Map_Manager is resized.
Mon Jul 31 12:56:17 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc/Trace: Reimplemented the ACE Trace class to use the
new thread-specific storage wrapper.
* libsrc/Log_Msg: Reimplemented the Log_Msg class to use the new
thread-specific storage wrapper. This shouldn't affect any
existing code that was careful to only use the LM* macros...
* libsrc/Threads: Added a new class called Thread_Specific which
implements a C++ wrapper for SunOS 5.x thread-specific data
(this will also work for POSIX pthreads I believe). Thanks to
Tim Harrison (harrison@cs.wustl.edu) for coming up with the idea
for using C++ "smart pointers" to implement this.
* libsrc/Reactor/Timer_Queue.h: Moved Timer_Node from within
Timer_Queue to outside Timer_Queue and renamed it to
ACE_Timer_Node. Unfortunately, some compilers still don't like
nested classes (ugh)...
* Changed ACE_Synch_Options to be simply Synch_Options since it
is *not* an ACE private class...
Sun Jul 30 00:07:28 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/makeinclude/README: Added a new #define called
ACE_HAS_THREAD_SPECIFIC_STORAGE, which does exactly what it
sounds like! So far, I know that Solaris defines this. I'm not
sure which other platforms do (perhaps OSF/1 does?).
Fri Jul 28 14:53:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Fixed a bunch more problems with loop variables that were
uncovered with GCC 2.7. Thanks to Matt Stevens
(mstevens@ent.mrj.com) for noticing this.
* apps/Logger/Service_Configurator_Logger: Added a new flag called
ACE_HAS_NO_STATIC_DATA_MEMBER_TEMPLATES which is necessary to
workaround bugs with GNU G++... Thanks to Matt Stevens
(mstevens@ent.mrj.com) for noticing this.
* libsrc/Connection/Connector.C (cleanup_AST): Changed the
parameter list just a tad to try and fix a problem with
G++ (which doesn't seem to like unscoped typedefs in
argument lists or return values.
* libsrc/Misc/Profile_Timer.i: Changed ::getrusage to be getrusage
to avoid problems with macros and scope operators...
* include/ace/testconfig.h (ACE_DEFAULT_RENDEZVOUS): Changed the
value from /tmp/foo to /tmp/fifo.ace. Thanks to Neil B. Cohen
(nbc@metsci.com) for suggesting this.
Thu Jul 27 12:30:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/TokenServer/server/TokenHandler.C (abandon): Fixed a minor
bug that caused assert() to fail when a client abandoned a
Token.
* libsrc/Reactor: Fixed a bug with the design of the Reactor's
Timer_Queue cancellation mechanism. The new mechanism is much
more robust since it ensures that timer_ids (used to cancel
pending timers) are unique up to values of greater than 2
billion timers! As long as timers don't stay around longer than
this there should be no problems with accidentally deleting the
wrong timer. Thanks to Bill Sears (wsears@world.std.com) for
noticing this problem.
One nice consequence to this change is that legacy code that
would have broken with the previous change is now 100%
compatible!
* Provided a definition of ACE_Synch_Options::arg(const void *),
which I'd forgotten to define before (darn templates...).
Thanks to Tim Harrison (harrison@cs.wustl.edu) for finding this!
* include/ace/sysincludes.h: Added a total hack to get HP/UX to
understand getrusage(). The trick is to use the following
undocumented syscall:
#define getrusage(a, b) syscall(SYS_GETRUSAGE, a, b);
What a hack (but it works...).
Tue Jul 25 13:20:58 1995 Douglas C. Schmidt (schmidt@kavita.cs.wustl.edu)
* libsrc/Misc/Profile_Timer: Fixed a typo in Profile_Timer.h
(ACE_HAS_RUSAGE_T should have been ACE_HAS_GETRUSAGE). Thanks
to George Reynolds (george@dvcorp.com) for noticing this.
* Changed all uses of ::getopt() to use the ACE class Get_Opt
get_opt. Also changed all uses of optarg to get_opt.optarg.
Thanks to Bob Vistica (robertv@ims.com) for detecting and
reporting some inconsistencies in my previous changes...
Mon Jul 24 19:03:03 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include: I've added config and platform support for SGI IRIX5.3
for use with the SGI C++ compiler. Thanks to Stuart Powell
(stuartp@ot.com.au) for these config files.
* libsrc/Connection/Acceptor.C (handle_input): Added the
Event_Handler::DONT_CALL flag when removing the Oneshot_Acceptor
from the Reactor so that we don't set it's peer_acceptor_ to -1.
Mon Jul 24 12:46:10 1995 Douglas C. Schmidt (schmidt@kavita.cs.wustl.edu)
* libsrc/Misc/Profile_Timer: Fixed problems stemming from the fact
that HP/UX doesn't seem to support getrusage() (how odd).
* tests/Connection: a new test directory to test out the Connector
and Acceptor pattern implementations.
Sun Jul 23 12:26:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Acceptor.C: Fixed a minor bug with the
Oneshot_Acceptor constructor. Thanks to John Morey
(jmorey@hitel.com) for noticing this and the one below.
* libsrc/Reactor/Timer_Queue: Moved the static method current_time
from the Timer_Queue.i file to the Timer_Queue.C file. This
avoids a bug with HP/UX C++.
Sat Jul 22 15:54:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released beta version 3.2.9. Once this compiles on all major
platforms then it's time to move to version 3.3.
* Added a number of miscellaneous changes for OSF/1 courtesy of
David Trumble (trumble@cvg.enet.dec.com). One of these changes
involved changing all uses of Reactor::{ADD,SET,CLR,GET} to
Reactor::{ADD,SET,CLR,GET}_MASK in order to avoid a class with
some symbols in OSF/1.
Fri Jul 21 00:21:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Finally was able to test ACE on the SunOS 4.x platform (using
the SunC++ 4.0.1 compiler). The entire release compiled
correctly! This is a great relief after fighting with this
stuff for months... If you are building ACE on SunOS 4.x I'd
*strongly* recommend you get SunC++ 4.0.1 since it is the only
compiler that seems to be able to grok the weirdness of SunOS
4.x...
* Finished updating all the ./tests and ./apps code so that it
works correctly with the new Acceptor/Connector modifications.
To see examples of these changes check out
./tests/IPC_SAP/SOCK_SAP/CPP-{nbclient,inserver}.C.
* libsrc/Misc/Profile_Timer: Merged in the new Profile_Timer
implementation from David Trumble (trumble@cvg.enet.dec.com).
This will work with basically the same interface as the current
scheme even if the OS platform doesn't support the prusage_t
type...
Thu Jul 20 01:07:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection: Added a new class called ACE_Synch_Options
which is used in both the Acceptor and Connector classes to
consolidate options related to synchronous and asynchronous
behavior.
* libsrc/Connection: Added a new class called Oneshot_Acceptor.
This class inherits from the Acceptor but it only accepts one
connection at a time (i.e., it doesn't keep itself registered
with the Reactor). Several examples in the tests/SOCK_SAP
directory have been added to illustrate how all this works.
* libsrc/Connection/Connector: completely redid the Connector and
Acceptor class interfaces to incorporate the new changes for
asynchronous and synchronous behavior. The new scheme should be
much more general (and correct...). Thanks to Tim and Irfan for
helping out with this.
* libsrc/Threads/Synch: Fixed the implementation of Recursive_Lock
so that it won't have race conditions when testing the thread id
and nesting level in parallel threads.
Wed Jul 19 13:15:05 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Timer_Queue: Added new support for cancellation
of individual Event_Handlers in the Reactor. In addition, it is
now possible to cancel all Event_Handlers with a single call to
Timer_Queue::cancel(). Note that this new scheme will break
existing code since Timer_Queue::schedule() (and
Reactor::schedule_timer()) now return ACE_Timer_Node *'s rather
than ints...
* libsrc/Service_Configurator/Service_Config: Fixed a problem
where the "-s" option didn't work since it was parsed when
"Service_Config::open" was called
(it sets Service_Config::signum_). However, previously the
signal handler was already setup by the constructor. By moving
this registration to the open() method the problem was solved.
Thanks to Bob Vistica (robertv@ims.com) for noticing this.
* libsrc/Service_Configurator/Service_Manager: Changed the
Service_Manager::reconfigure_services to use this->signum_
rather than to hard code SIGHUP. Thanks to Bob Vistica
(robertv@ims.com) for this insight.
Mon Jul 17 12:08:08 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Threads/Token.C (renew): Fixed a typo so that we compare
this->head_ == 0 rather than this->head_->next_ == 0.
* libsrc/Reactor/Reactor.h: Changed the Reactor to use the
Reactor_Token rather than the pure Token to make sure that the
sleep_hook() is called to unblock the Reactor.
Fri Jul 14 14:12:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection: Changed the default behavior of the Connector
and Acceptor classes such that they pass a -1 to
svc_handler_->close() when things go wrong. This is useful as a
flag to close() (e.g., if it needs to figure out what to do if
is shuts down prematurely).
* libsrc/Connection/Svc_Handler.C: Added a default definition of
the put() method, which is defined as a pure virtual method in
class Task.
Thu Jul 13 23:10:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/ace/sysincludes.h: Added support for the SGI IRIX 5.3
OS. More screwy gettimeofday() hacks (what a pain...). Thanks
to Matt Stevens (mstevens@kirk.softeng.infonautics.com) for
these fixes.
* include/makeinclude/platform_sunos5_centerline.GNU: Fixed a
vexing problem that was causing the Centerline C++ compiler to
puke when compiling ACE. Thanks to Chandra Venkatapathy
(cvenkat@develop.bsis.com) for finding a solution!
Tue Jul 11 00:01:15 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released version 3.2.6 for use by Karl and Detlef.
Mon Jul 10 00:28:51 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/TTCP: Added support for benchmarking the performance of
Orbix, ORBeline, ACE SOCK_SAP, and C sockets. These results are
available at URL http://www.cs.wustl.edu/~schmidt/COOTS-95.ps.Z
* libsrc/Service_Configurator/Makefile: Added new commands to the
Service Configurator Makefile so that all automatically
generated flex and yacc symbols (i.e., the "yy" stuff) is
renamed "ace_yy". The purpose is to avoid conflicts with other
uses of flex/yacc lexers/parsers with ACE. Thanks to Steve
Ritter (ritter@titan.com) for this suggestion and code.
* libsrc/IPC_SAP/TLI: Changed the TLI files so they are
conditionally compiled only if the platform supports TLI...
* libsrc/Connection: Changed the inlining strategy of Connector,
Acceptor, and Svc_Handler so that very short methods are always
inlined, but anything larger is never inlined...
Sun Jul 9 14:07:02 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* include/ace/testconfig.h: Changed all occurrences of DEFAULT_*
to ACE_DEFAULT_ to prevent namespace collision.
* libsrc/Connection/Connector: Massively improved the Connector
class so that its connect() method supports the following
behavior (tv == "timeout value" and ur == "use Reactor"):
Parameters | Description
|
tv | ur |
-----|----------|-------------------------------
| |
NULL | yes | infinite timeout (using Reactor)
| |
time | yes | try asynch transaction for
| | the specified time (using Reactor)
| |
0,0 | yes | poll; try, if EWOULDBLOCK,
| | then return immediately
| | (using Reactor)
| |
NULL | no | block forever (don't use Reactor)
| |
time | no | do a blocking transaction
| | for the specified time
| | (don't use Reactor)
| |
0,0 | no | poll; but do not initiate a
| | nonblocking transaction
| | (don't use Reactor)
* libsrc/IPC_SAP/SOCK_SAP/SOCK_Connector: Changed the behavior of
the SOCK_Connector::connect() method so that it uses Time_Values
rather than a simple flag that indicates whether or not to use
non-blocking connectors. The new scheme is an improvement since
it allows greater control over synchronous and asynchronous
timeouts for connection establishment. This behavior parallels
that of SOCK_Acceptor, as well! If this works well then I'll
update the TLI_Connector and SPIPE_Connector to match this
interface.
* libsrc: Continued to improve ACE's use of the global name space
by prefixing all "helper" classes with "ACE_"
* Updated SPIPE_Acceptor so that it would have the same basic
interface as the SOCK_Acceptor and TLI_Acceptor.
* libsrc/IPC_SAP: Consolidated the handle_timed_wait() methods
used by the TLI, socket, and STREAM pipe wrappers so that they
share the new ACE::handle_timed_accept() method, which is in
libsrc/Misc.
* libsrc/Misc: Modified the structure of Misc.[Ch]. Originally,
this file contained a bunch of stand-alone C functions with the
prefix "ace_" to keep them from conflicting with user's code.
I've modified things now so that all the miscellaneous functions
are now static methods in class ACE. This provides better scope
control...
* libsrc/Log_Msg/Log_Msg: Replaced the use of a Mutex in class
Log_Msg with a Recursive_Lock<Mutex>. This is necessary to
handle signals correctly...
* libsrc/Reactor/Reactor: Modified the behavior of
Reactor::notify() so that writers will block if the pipe is
full. This solves some nasty flow-control problems.
* libsrc/Reactor/Handle_Set: changed all uses of fd_set to
ACE_FD_SET_TYPE * so that HP_UX would work correctly...
* include/ace/config-hpux.h: Removed the ACE_HAS_XLI flag until I
get a better idea which HP systems this is installed on.
* libsrc/Threads/Thread: Added a new static method called
spawn_n() that spawns "n" threads all running the same function.
Sat Jul 8 14:14:34 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Service_Configurator: Made some miscellaneous changes to
"const" methods and parameters in order to handle the new
Reactor changes (C++ can be such a pain about this
sometimes...).
* libsrc/Threads: Added "yield" and "sigsetmask" methods to class
Thread. How did I manage to omit these before?!
* libsrc/Reactor: Updated the Reactor to use the new Token class
described below. This greatly simplies the structure of the
multi-thread support in the Reactor code. In addition, it
should improve performance because it cuts the number of context
switches compared with the old scheme. Many thanks to
Karl-Heinz and Detlef for encouraging me to redo the Reactor
implementation.
* libsrc/Threads: Added a new class called Token that provides a
flexible and efficient recursive mutex scheme. Thanks to
Karl-Heinz Dorn (kdorn@erlh.siemens.de) and Detlef Becker
(beckerd@erlh.siemens.de) for sharing their original code for this.
Thu Jul 6 10:37:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Event_Handler_T: Conditionally compiled this so
that it will only compile if the compiler supports template
typedefs (e.g., G++ doesn't seem to like this...).
* Started to make changes in ACE to deal with the new ANSI C++
semantics in the scope of variables defined within for loops.
Thanks to Aniruddha Gokhale (gokhale@cs.wustl.edu) for noticing
this in G++ 2.7...
Wed Jul 5 21:50:39 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Svc_Handler: Fixed the behavior of the
Svc_Handler class so that it can be configured with a Reactor
other than Service_Config::reactor, just like the Acceptor and
Connector. Thanks to Karl-Heinz Dorn (kdorn@erlh.siemens.de)
for suggesting this!
Tue Jul 4 00:21:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added some new changes for Linux courtesy of Charles Rennolet
(clr@thurse.mn.org).
* libsrc/Reactor/Reactor.C (bit_ops): Fixed a dumb error in
bit_ops that was caused by checking "else if (Reactor::SET)"
rather than "else if (ops == Reactor::SET)". Thanks to Mark
Patton (mark_patton@tx72.mot.com) for finding this bug and
reporting it along with the fix.
* include/ace/sysincludes.h: Added new fixes for M_SYNC and
ENOTSUP on SunOS 4.
* libsrc/Reactor: Added new support for integrating X and the
Reactor. These files are called XtReactor.* and XReactor.*.
Thanks to Eric Vaughan (evaughan@arinc.com) for providing this
stuff...
Mon Jul 3 19:44:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added support for SunOS 5.5 on i86 PC. Thanks to Bin Mu
(mubin@wfg.com) for the config files and fixes.
* libsrc/Misc/Profile_Timer: Added new support for versions of
UNIX that don't support prusage_t. The new version of
Profile_Timer will use gettimeofday() and getrusage() of
prusage_t and /procfs isn't available... This code hasn't been
tested yet (since I don't have SunOS 4.x) so I don't know if it
works.
* Hopefully fixed the SunOS4 prototype for gettimeofday(). Thanks
to Andrew McGowan (ajm@se09.wg2.waii.com) for the suggested fix.
* include/makeinclude/platform_hpux.GNU (CC): Added new support
for building ACE and shared libraries on HP/UX. Thanks to Jam
Hamidi (jh1@osi.com) for this code.
* libsrc/Reactor/Handle_Set: Fixed Handle_Set_Iterator::operator++
to check for index to be greater or equal than NUM_WORDS instead
of just equal. This is better for sanity, although it may not be
needed. Thanks to Carlos Garcia Braschi (cgarcia@caramba.tid.es)
for suggesting this fix.
Wed Jun 14 11:16:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/TLI_Acceptor: modified TLI_Acceptor so that it's
public constructor/open() and accept() methods are more similar
to the SOCK_Acceptor. In particular, added support for
"SO_REUSEADDR" in TLI_Acceptor and time values for accept().
Thanks to John P. Hearn (jph@ccrl.nj.nec.com), TLI_SAP now does
the right thing for socket options.
* libsrc/IPC_SAP: Fixed up the SOCK_Acceptor and TLI_Acceptor in
order to add better support for "timed accepts." The new scheme
uses Time_Values, which is more consistent with other parts of
ACE. In addition, the Time_Value was moved from the
constructor/open() to the accept() method, which allows more
fine grained control over this behavior. Thanks to Irfan
(ip1@cs.wustl.edu) for suggesting this.
* libsrc/IPC_SAP: Cleaned up the SOCK_Acceptor::open and
TLI_Acceptor::open routine. In addition to being more compact
and robust, this routine now also let's open() determine which
local port to bind to (if you pass in Addr::sap_any as the
local_addr). Thanks to Irfan (ip1@cs.wustl.edu) for suggesting
this.
Tue Jun 13 16:09:13 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Timer_Queue: Fixed an odd problem with the
Timer_Queue on Solaris. Apparently the select() call will
return slightly earlier than the timeout dictates due to lack of
granularity with the system clock. This was causing problems
where the Reactor wasn't correctly dispatching the
handle_timeout() method of Event_Handlers. The fix was to add a
10 Millisec "fudge factor" when calling the
Timer_Queue::expire() method. Please let me know if this causes
any problems. Thanks to Giang Hoang Nguyen
(yang@titan.com) to noticing this problem.
* libsrc/Connection/Acceptor: Enhanced the Acceptor class so that
it is possible to accept a new SVC_HANDLER synchronously, rather
than always driving this acceptance out of the Reactor's event
loop. Thanks to Irfan (ip1@cs.wustl.edu) for suggesting this.
* libsrc/IPC_SAP/Addr: Changed all occurrences of ace_sap_any to
Addr::sap_any (i.e., sap_any is now a static data member in
class Addr). This is an improvement since it helps to limit the
scope of what would otherwise be global variables...
Wed Jun 7 17:26:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* apps/Logger/Reactor_Logger/Client_Acceptor.i (handle_input):
Fixed a braino that omitted an important block of code! Thanks
to Ken Konecki (kenk@wfg.com) for finding this.
Fri Jun 2 13:59:07 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/INET_Addr.i (set): Removed the special case
for INADDR_ANY. This should just fall right out...
Thu Jun 1 19:45:21 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SOCK_SAP/SOCK_Connector: Added support to
SOCK_Connector so that it is possible to bind the local TCP port
number prior to establishing the connection. Also fixed the
TLI_Connector to be consistent with this approach. Thanks to
Mark Patton (mark_patton@tx72.mot.com) for this idea.
* Fixed a problem with Mem_Map that was caused by the fact that
some versions of Unix (e.g., SunOS 4.x) don't support MS_SYNC...
Thanks to Andy McGowan (mcgowan@wg2.waii.com) for noticing this.
* Fixed a very stupid bug in ./libsrc/Synch.h that accidentally
omitted this->lock_.acquire() from the Guard class constructor.
Thanks to Bin Mu (mubin@wfg.com) for noticing this!
Fri May 26 13:20:38 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Connection/Acceptor: Added a new method called
make_svc_handler() that generalizes the dynamic creation of a
SVC_HANDLER by the Acceptor's Template Method handle_input().
This scheme is completely backwardly compatible with the
original approach, but now allows transparent extension too!
* libsrc/Connection/Acceptor: cleaned up the Template Method logic
in Acceptor::handle_input. No longer do we set the listener
socket into non-blocking mode and then rely on a -1 with
EWOULDBLOCK to indicate there are no more connections to
establish. This was causing problems for singleton Svc_Handlers
since the Acceptor was setting their peer_stream_ to -1... The
new approach should complete solve this problem.
Mon May 22 15:10:27 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released version 3.2.3 so that Bill Sears can test the new
#include "ace/" features.
* Modified all the ACE source, tests, and apps so that all
#includes of its headers are refixed by ace/, e.g.:
#include <ace/Reactor.h>
There are two reasons for have the include files be of
this form:
First, you can tell at a glance by looking at the caller where
the library is coming from.
Secondly, you can build an include tree of the form:
/include/lib1
/include/lib2
/include/lib3
/include/ace
which then links to WRAPPER_ROOT. Now, all you have to do
when you build a make file is point to the include root, and
put links in the include root. This is especially helpful
if there are multiple versions.
This means just one less thing that has to be modified in the
Makefile. Thanks to Bill Sears (wsears@world.std.com) for
recommending this change.
Sat May 20 17:12:35 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* config-irix5.3-sgic++.h: Added new configuration support for SGI
IRIX5.3 courtesy of Stuart Powell (stuartp@ot.com.au).
Sat May 13 20:44:06 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Generalized the SOCK_Connector::complete method so that it takes
a Time_Value timeout. This allows applications to wait upto a
certain limit before giving up on a non-blocking connection.
Updated the tests in ./tests/IPC_SAP/SOCK_SAP/CPP-inclient.C to
illustrate how this is used.
* Added some interesting new tests to ./tests/Mem_Map that can be
used to benchmark the performance of various strategies (e.g.,
stdio, read/write, mmap, etc.) for copying files.
Fri May 12 19:09:10 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Mem_Map/Mem_Map: Added two new overloaded methods called
sync() that are wrappers around the msync(3c) system call. Also
added a new unmap() method that gives access to the full
behavior of munmap(3c).
Wed May 10 14:16:16 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Tried yet another fix for the gettimeofday() botch that both
Centerline and SunOS 5.4 screw up in different ways. Thanks to
Medhi Tabatabai (Mehdi.Tabatabai@ed.nce.sita.int) for the latest
fixes.
Tue May 9 19:05:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Handle_Set.C: Fixed some "off-by-one" errors that
were occurring in the Handle_Set::sync() and set_max() methods.
Thanks to Nigel Hooke (n.hooke@trl.oz.au) for finding and fixing
these.
Mon May 8 02:01:54 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor.C: Moved the Null_Callback class from
being nested within the Reactor class to outside the Reactor
class. This fixes a problem with the SIG compiler.
* Released version 3.2.2.
* libsrc/Reactor/Signal.C: Made the Signal_Handler class
thread-safe as well as signal-safe.
* libsrc/Reactor/Reactor.C: Modified the new Reactor
implementation slightly to handle signals correctly.
* libsrc/Threads/Synch.h: Added a new conversion operator to
Recursive_Lock that returns the underlying LOCK in case we need
it for something (e.g., to initialize a Condition object).
Sun May 7 04:17:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor.C: Finished what I hope will be the last
set of changes to make the Reactor robust in multi-threaded
programs in situations where separate threads are used to
register and remove handlers. The final solution is elegant in
that it does not significantly penalize the performance of
programs that do not use separate threads to register and remove
handlers. Moreover, if you compile without the ACE_MT_SAFE flag
the Reactor will not include additional state information
related to the multi-threaded implementation.
* libsrc/Threads/Synch.h: Subclassed the Guard class to make a new
class Try_Guard that uses tryacquire() to obtain a LOCK.
Fri May 5 18:43:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Released version 3.2.1
Thu May 4 19:43:01 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/TLI_SAP/TLI_Connector.C (connect): Fixed a
problem whereby a t_bind() was being done twice. Since I didn't
write this code I don't know if my fix will work generically on
all platforms supporting TLI. Please let me know if there are
any problems.
Tue May 2 17:21:53 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor: Added a new notification feature that allows
multiple threads of control to enqueue Event_Handler * to the
main Reactor thread via the pipe used to wake up the main
Reactor thread. The Reactor will call the handle_exception()
method on Event_Handler with a HANDLE == -1 to notify the
handler. This feature is very useful if you need to have
certain operations (such as handler termination) performed in
the main thread.
Tue Apr 25 00:34:18 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor: Fixed a stupid pair of typos in the Reactor that
failed to cast arguments to the pipe to char *.
* libsrc/Connection: Fixed a portability problem with the
Connector: we can't use RW_Mutex for synchronization since not
all platforms support threads. The quick fix is to use
Null_Mutex, but a better long term approach is on the way!
* Released version 3.2.
* Added richer support for the TLI_Connector to make it work
better with protocols other than TCP/IP. Thanks to Mats
Sundvall (sundvall@perrier.embnet.se) for these enhancements.
Mon Apr 24 02:26:04 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Changed the SOCK_Dgram_Brdcast class name to SOCK_Dgram_Bcast
and the SOCK_Mcast to SOCK_Dgram_Mcast to be more consistent.
* Massively improved the Reactor's support for multi-threading.
There was actually a major problem in previous versions of ACE
that used poll() as the underlying event demultiplexor. Poll()
produced incorrect results when the Reactor::handle_events()
method was run in one thread, but another thread came along and
registered or removed an Event_Handler. The new version fixes
this problem so that the Reactor will now work correctly in
multi-threaded programs.
One consequence of this change is that sysincludes.h and the
SunOS 5.x configuration files have been changed so that poll()
is no longer used as the default demultiplexor. The reason is
that poll() doesn't work as efficiently when used in
multi-threaded programs (ugh). See the Reactor code for
examples of how this all works now. Basically, the trick is to
use the select()-style implementation for most of the code, and
transform to poll()-style implementation only when necessary.
Sat Apr 22 03:35:51 1995 Douglas C. Schmidt (schmidt@lambada.cs.wustl.edu)
* libsrc/ASX/Message_Queue: Added a new method to the
Message_Queue class called unblock(). This method allows one
thread to release all other threads that are waiting for
messages to be enqueued or dequeued on a Message_Queue.
Modified the return value of methods like enqueue_head() and
dequeue_head() so that if a thread unblocks() then these methods
return -1 with errno == ESHUTDOWN. Also changed the name of
some of the internal methods so that they would be more
consistent.
* libsrc/Connection/Connector: Fixed a stupid bug caused by
failing to have a destructor for Connector. Thus, there are
cases where unconnected Svc_Handlers are left around in the
handler_map_. This causes problems for dynamic linking in
conjunction with the Reactor, so now the destructor iterates
through all the unconnected Svc_Handlers and removes them from
the Reactor.
Fri Apr 21 15:28:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Signal: Changed Sig_Set::addset() and
Sig_Set::delset() to the more appropriately named sig_add() and
sig_del(). Also added '_' in the Sig_Set method names to be
more consistent...
* Removed the ./libsrc/IPC_SAP/SOCK_SAP/misc.[hC] file and merged
the one function in that file (ace_bind_port) into
./libsrc/Misc/Misc.[hC].
* Added a bunch of fixes from various people to make ACE compile
better on SGI, SunOS 4, and HP/UX. Thanks for all the fixes!
* libsrc/IPC_SAP/Addr: Changed sap_any to ace_sap_any to avoid
problems with the namespace.
* Added a new portability flag that only compiles the SOCK_Mcast.*
stuff if the platform supports multicast!
* ./libsrc/Shared_Malloc: Fixed some portability bugs with
Memory_Pool.C and added new support for SunOS 4.x running SunC++
4.x. Thanks to Steve Warwick (swarwick@arinc.com) for this
strategic help.
Wed Apr 19 09:05:43 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Fixed up the ./libsrc/CORBA_Handler so that it will correctly
compile on platforms that don't have Orbix...
* libsrc/Misc: added a new "Simple String" class called SString.
This is not really meant to be used by end-user applications.
It is used by certain portions of ACE that need to have
operator== and operator!= defined on a string (e.g., the
Token_Server and the Orbix Event_Comm components that use the
Map_Manager).
Tue Apr 18 00:09:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/ASX: Fixed a stupid bug in Task::activate() that didn't
spawn a thread if the Thread_Manager was NULL...
Sat Apr 15 19:39:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor: Added a new class to the Reactor called
Event_Handler_T.[hi]. This class makes it easy to integrate
existing classes into the Reactor framework without requiring
them to inherit from Event_Handler directly. This technique is
a superset of the DEF_TIE approach used by IONA in Orbix as one
of the ways to combine an existing class (that doesn't know
anything about CORBA) with a CORBA interface. Thanks to Greg
Lavender
(g.lavender@isode.com) for the suggestion.
Fri Apr 14 14:41:49 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Run catman on the ./man directory so that it now has a windex
file. This facilitates "man -k".
Thu Apr 13 23:39:22 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor: Made the Reactor be a stand-alone component that
does not require any other ACE libraries.
* Added two new methods to the Reactor so that you can now
register or remove a set of HANDLEs in a single call. Thanks to
Bill Sears
(wsears@world.std.com) for this suggestion. Basically, now you
can register or deregister a set of n HANDLEs with one operation
(rather than doing n register_handler () or n remove_handler
()).
* include/sysincludes.h: Changed the name of the macro MT to
ACE_MT and DB to ACE_DB to avoid polluting the namespace.
Wed Apr 12 11:14:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor.C (close): Added code to close down the
pipe handles when the Reactor is shut down. Thanks to Mark
Patton (mark_patton@tx72.mot.com) for this info.
Fri Apr 7 18:33:30 1995 Douglas C. Schmidt (schmidt@siesta.cs.wustl.edu)
* Added a new method to CORBA_Handler so that handlers don't need
to subclass from CORBA_Handler, but rather can call the
CORBA_Handler::register_service() method (which is static).
Thanks to Chris Tarr (ctarr@objectspace.co) for this suggestion.
Mon Apr 3 13:09:45 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added a new static method to Service_Config.[hC] called
end_event_loop(). This can be used to stop the run_event_loop()
method of the Service_Config. In addition, all the methods in
Service_Config were changed to be static to emphasize the fact
that the Service Configurator is a singleton...
* include/Trace.h (ACE_TRACE): Changed the macro T to ACE_TRACE.
This will prevent namespace pollution.
* Added support for the Orbix CORBA implementation. If you don't
have Orbix, you'll need to remove this flag from the
config-sunos5-sunc++.4.x.h file if you are compiling on SunOS
5.x.
Sun Apr 2 01:12:19 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added new support for C++ wrappers around the IP multicasting.
There are three new files in ./libsrc/IPC_SAP/SOCK_SAP called
SOCK_Mcast.[hiC] and a new test directory in
./tests/Reactor/multicast and ./tests/Reactor/ntalker to
illustrate how to use this stuff. Thanks to Tim Harrison
(harrison@cs.wustl.edu) for this code.
Sat Apr 1 18:48:40 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added support to the libsrc/Shared_Malloc/Memory_Pool.[hC] class
for System V shared memory, as well as for mmap(2) and sbrk(2)
memory. Please note that this has not been extensively tested
yet, so use with caution...
Thu Mar 30 21:50:00 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Misc/Atomic_Op: Added the postfix versions of the ++ and
-- operators. This stops the Sun CC compiler from griping about
the "anachronistic" usage when using a++ rather than ++a.
Thanks to Bruce Worden <bruce@betsy.gps.caltech.edu> for the
suggestion.
Wed Mar 29 22:26:37 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Handle_Set: Fixed a weird problem where I was
using NOFILE as the max number of descriptors rather than
FD_SETSIZE. I don't know why I was doing this.
* Also fixed up a problem with Handle_Set that was causing the
iterator to go nuts when it got a strange initial value of
fd_set in Handle_Set. Orbix triggers this kind of nonsense in
some cases...
Tue Mar 28 21:01:36 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/Reactor/Reactor.C: swapped the order of dispatching so
that handle_exception methods are dispatched before handle_input
methods to improve response time for exceptions (e.g., OOB
data). Thanks to Detlef Becker
(beckerd@erlh.siemens.de) for suggesting this.
* Fixed a bug in ./ASX/Stream.i that caused problems when a Module
was popped off a Stream. Thanks to Paul Stephenson for noticing
this and sending me the fix.
* Changed the Reactor::dispatch methods so that they dispatch the
timers *before* dispatching the I/O-based event handlers. This
is helpful for systems that are time-delay sensitive.
* libsrc/Reactor/Time_Value: Added new += and -= operators to
Time_Value. Thanks to Alex V. Maclinovsky
(garyh@teleng1.tait.co.nz) for this suggestion.
Thu Mar 23 15:38:23 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/Addr/SPIPE_Addr.i (set): Fixed a problem that the
HP/UX compiler had with complex arithmetic expressions.
* libsrc/Service_Configurator: fixed up the Service_Configurator
source code so that it will compile correctly on HP/UX
platforms.
Tue Mar 21 00:28:25 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* libsrc/IPC_SAP/SOCK_SAP/LSOCK_Connector.h: Fixed an amazingly
stupid bug with LSOCK_Connector, where I was passing in a
default argument of PF_INET instead of PF_UNIX... Arrgh!
Mon Mar 20 20:24:29 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Fixed up the $WRAPPER_ROOT/include/makeinclude/ directory to
define a new set of platform-specific configuration files. This
should greatly improve the portability of ACE to different
OS/compiler platforms.
* Added a bunch of changes to allow ACE to build with Lucid C++ on
SunOs 4.x. This should also fix some other problems we've been
having with SunOS 4.x. Thanks to Lee Baker (baker@ctis.af.mil)
for these changes.
Sun Mar 19 00:34:30 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added manual pages for all of the ./libsrc libraries. These
manual pages are all generated automagically from the libsrc
header files.
Sat Mar 18 10:48:46 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Finally broke down and fixed the Makefile scheme so that there
is just one shared library (libACE.so) and one archive library
(libACE.a). This should massively simplify the application
development process, though it may require a bit of fixing of
Makefiles to remove all the -lReactor -lIPC_SAP stuff that was
in there before.
* libsrc/IPC_SAP/TLI_SAP/: Fixed a stupid bug that was causing
core dumps since the TLI option pointers weren't initialized to
0 in the TLI::TLI constructor. Thanks to Ed Brown for noticing
this (eebrown@netcom.com).
Wed Mar 15 00:08:19 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added some new fixes to get ACE to run on OSF1 and Linux.
Tue Mar 14 13:36:31 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added several changes to the source code and config-hpux.h
configuration file based on comments from Alex Ranous
(ranous@nsa.hp.com). In particular, changed ACE_HAS_NO_FDSET to
ACE_SELECT_USES_LONG.
Mon Mar 13 09:23:58 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Improved the Makefile scheme so that the use of PTDIRS is no
longer required. The trick was to link the appropriate template
*.C files into the WRAPPER_ROOT/include directory. This enables
the compiler to find them in one single place.
Sun Mar 12 22:35:50 1995 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
* Added a new mechanism to clean up the insane number of -D's in
the Makefile. This new mechanism requires a bit more work at
installation time, but should greatly reduce the effort during
normal software development
(once ACE is installed...). See the INSTALL file
for more details.
Fri Mar 10 17:29:02 1995 Douglas Schmidt <douglas@gtcterminator>
* Fixed a stupid bug in Map_Manager.i which wasn't correctly
setting default values for fields in one of the Map_Manager
constructors.
Fri Mar 10 08:54:42 1995 Doug Schmidt <douglas@gtccipher>
* /libsrc/Connection/Acceptor.i: Fixed a potential memory leak in
handle_input().
Thu Mar 9 11:59:54 1995 Doug Schmidt <douglas@gtccipher>
* Changed the Map_Manager::find() method to use class Read_Guard
so that multiple finds may proceed in parallel on a multiple
threaded application. Likewise, changed the implementation of
bind() and unbind() to use class Write_Guard so that destructive
operations will be serialized correctly. One consequence of
this is that RW_Mutex must be used instead of Mutex...
* Added a new overloaded Map_Manager::unbind() method with an
INT_ID parameter. This parameter that passes back a reference
to the internal id being unbound. This allows the caller to
clean up any dynamic memory associated with the INT_ID.
Tue Mar 7 13:32:17 1995 Doug Schmidt <douglas@gtccipher>
* Changed a bunch more things to get ACE to compile with
Centerline C++. This should also make ACE more portable to
other cfront-based compilers.
* Had to change the ASX source in ACE to work around a stupid
problem with templates in cfront-based C++ compilers.
Fortunately, it was possible to mask most of the problems using
the C++ preprocessor.
* There seem to be some problems with cfront-based compilers (such
as centerline). They don't like the new SYNCH::MUTEX usage in
the Message_Queue.
* Removed several unused local variables in the INET_Addr::set()
method.
Wed Mar 1 00:35:11 1995 Douglas C. Schmidt (schmidt@tango)
* Added a major performance boost on high-speed networks. It
turns out that send(3) and revc(3) are slower than write(2) and
read(2) (since the latter are system calls, and the former are
library calls. Therefore, I added new overloaded methods to
SOCK_IO so that write(2) and read(2) are available to the user!
Tue Feb 28 10:13:09 1995 Douglas C. Schmidt (schmidt@tango)
* libsrc/Reactor/Reactor.C: Fixed the implementation of the
Reactor::open and Reactor::Reactor constructor so that it is now
possible to resize the size of the Reactor *after* the
constructor has run (by calling open()) *without* having to shut
down the Reactor first.
* Modified the Reactor::attach() method so that it will ADD the
new bits to the bitmask rather than SET them. Thanks to Mark
Patton for recommending this
(mark_patton@tx72.mot.com).
Sat Feb 25 15:08:04 1995 Douglas C. Schmidt (schmidt@tango)
* Released version 3.0.5.
Fri Feb 24 17:57:01 1995 Douglas C. Schmidt (schmidt@tango)
* Used the OSE class2man scripts to generate UNIX manual pages for
IPC_SAP, Thread, Connection, and Reactor. Other manual pages
will be forthcoming...
* libsrc/IPC_SAP/Addr/INET_Addr.i: Fixed a bug in one of the
INET_Addr::set() methods that caused a segmentation fault if
host_name was NULL. In addition, greatly cleaned up the code so
that all the "set" methods share a common basis of code.
Tue Feb 21 19:32:28 1995 Douglas C. Schmidt (schmidt@tango)
* Updated the entire release to use the new SYNCH template
interface for Task, Module, Stream, and Message_Queue. This is
*much* cleaner, though it reveals some bugs with the Sun C++
templates facility.
Mon Feb 20 22:46:14 1995 Douglas C. Schmidt (schmidt@tango)
* Changed the SPIPE_SAP, SOCK_SAP, and TLI_SAP *Connector class
methods from open() to connect(). This is a more accurate name
and it also fits in nicely with the Acceptor::accept() method.
* Started integrating new versions of various header files that
include hooks to automatically generate documentation.
Tue Feb 14 20:52:13 1995 Douglas C. Schmidt (schmidt@tango)
* Changed the order in which the Reactor dispatches descriptors.
Originally, it dispatched the "read" descriptors *before* the
"write" descriptors. Now, it dispatches the "write" descriptors
first. This was necessary to handle weird behavior of sockets
over TCP/IP when data is piggy-backed with the final ACK on a
non-blocking connection.
Mon Feb 13 15:49:21 1995 Douglas C. Schmidt (schmidt@tango)
* Changed the name of Event_Handler::get_fd() to
Event_Handler::get_handle() to be more consistent with other
usage in ACE.
Sat Feb 4 22:47:34 1995 Douglas C. Schmidt (schmidt@tango)
* libsrc/Service_Configurator/Service_Object: changed the
destructor to be virtual (thanks to Steffen Winther Sorensen
<sts@dad.stibo.dk> for noticing this).
Sat Jan 28 16:29:49 1995 Douglas C. Schmidt (schmidt@tango)
* Changed the name of class Map_Manager's Search_Structure struct
to Map_Entry. This is more specific to what that data structure
really does.
* Began adding support for Linux, courtesy of sts@dad.stibo.dk.
Sun Jan 22 23:15:38 1995 Douglas C. Schmidt (schmidt@tango)
* Changed the name of the ./libsrc/Connector-Acceptor directory to
./libsrc/Connection. Also changed the name of libConn_Acc.so to
libConnection.so to be more consistent.
Sat Jan 21 13:59:18 1995 Douglas C. Schmidt (schmidt@tango)
* libsrc/IPC_SAP: Fixed the *Acceptor classes for SOCK_SAP and
SPIPE_SAP so they behave just like FIFO_SAP and contain a method
called remove(). This method closes the underlying descriptor
and also unlinks the local address from the file system.
* libsrc/ASX/Message_Queue.i (copy): Fixed this code so that it
correctly stores starting at the wr_ptr rather than the rd_ptr.
Thanks to Chris Cleeland
(chris@milo.st-louis.mo.us) for pointing this out
to me.
Wed Jan 11 13:07:19 1995 Douglas C. Schmidt (schmidt@tango)
* Changed all uses of class Thr_Manager to class Thread_Manager
and class Thr_Cntl to Thread_Control. This is more readable and
is now consistent with the documentation...
Tue Jan 10 13:49:31 1995 Douglas C. Schmidt (schmidt@tango)
* Modified the makefile scheme so that only the *.so files are
built by default. If you want to build both *.a and *.so files,
uncomment out the lines described in
$WRAPPER_ROOT/include/makeinclude/rules.lib.GNU. Note that this
will require you to run make on the ./libsrc directories twice
in order to properly build and install both the *.a and *.so
libraries.
Mon Jan 9 22:57:29 1995 Douglas C. Schmidt (schmidt@tango)
* libsrc/Reactor/Signal.h: Changed the name of the Signal_Block
class to the Signal_Guard class to be more consistent with the
Guard class in Synch.h.
Sat Jan 7 19:49:46 1995 Douglas C. Schmidt (schmidt@tango)
* tests/ASX/Event_Server/Event_Server: Revised the Event Server
test example to use the Acceptor pattern components.
Fri Jan 6 23:38:21 1995 Douglas C. Schmidt (schmidt@tango)
* Added a new method to class Task that turns a task into an
active object (i.e., associates a thread of control with the
task). This is useful since it replaces all the places in
application code that original said "this->thr_mgr_.spawn
(THR_FUNC
(&this->svc_run))", etc...
Thu Jan 5 21:05:15 1995 Douglas C. Schmidt (schmidt@tango)
* libsrc/ASX: Changed the capitalization of class STREAM to class
Stream. This seems more reasonable since I don't see any
particular reason to shout about Streams!
* libsrc/ASX/Task: Changed name of method qreply() to reply() to
reflect the fact that the name of the class is no longer Queue!
* libsrc/ASX: Made both Task and Message_Queue into parameterized
types. This greatly improves the ability to parameterized
synchronization into an application.
* Changed all occurrences of timestruc_t to use Time_Value
instead. This helps to improve portability and reduce the
"impedence mismatch" caused by mixing both C and C++ types in
the ACE interfaces. Note that one drawback of this is that we
lose nano-second timing accuracy. However, I don't know of any
real OS platforms that support that degree of precision anyway!
* libsrc/Reactor: Moved the static "zero" data member from the
Timer_Queue class to the Time_Value class. Also added a new
static data member called "zerop," which is a pointer to "zero".
* libsrc/Threads/Synch: Changed the interface of class Condition
so that it no longer has both wait() and a timedwait() methods.
Since C++ has default values, these two methods were redundant.
Now, there is only a single method called wait(). By default,
it's argument is 0, which defaults to the original wait()
semantics. If the argument is non-zero then the timewait
semantics apply.
* libsrc/Threads/Synch: Added a new class called Null_Condition.
This is similar to the Null_Mutex class in the sense that it has
the same interface as class Condition, but it's methods are all
no-ops
(however, wait() and signal() both set errno = ETIME
before returning...). This class is useful for
parameterizing synchronization into an application.
|