@@ -904,20 +904,33 @@ - (id)delegate
904
904
}
905
905
}
906
906
907
- - (void )setDelegate : (id )newDelegate
907
+ - (void )setDelegate : (id )newDelegate synchronously : ( BOOL ) synchronously
908
908
{
909
- if (dispatch_get_current_queue () == socketQueue)
910
- {
909
+ dispatch_block_t block = ^{
911
910
delegate = newDelegate;
911
+ };
912
+
913
+ if (dispatch_get_current_queue () == socketQueue) {
914
+ block ();
912
915
}
913
- else
914
- {
915
- dispatch_async (socketQueue, ^{
916
- delegate = newDelegate;
917
- } );
916
+ else {
917
+ if (synchronously)
918
+ dispatch_sync (socketQueue, block);
919
+ else
920
+ dispatch_async (socketQueue, block );
918
921
}
919
922
}
920
923
924
+ - (void )setDelegate : (id )newDelegate
925
+ {
926
+ [self setDelegate: newDelegate synchronously: NO ];
927
+ }
928
+
929
+ - (void )synchronouslySetDelegate : (id )newDelegate
930
+ {
931
+ [self setDelegate: newDelegate synchronously: YES ];
932
+ }
933
+
921
934
- (dispatch_queue_t )delegateQueue
922
935
{
923
936
if (dispatch_get_current_queue () == socketQueue)
@@ -936,33 +949,40 @@ - (dispatch_queue_t)delegateQueue
936
949
}
937
950
}
938
951
939
- - (void )setDelegateQueue : (dispatch_queue_t )newDelegateQueue
952
+ - (void )setDelegateQueue : (dispatch_queue_t )newDelegateQueue synchronously : ( BOOL ) synchronously
940
953
{
941
- if ( dispatch_get_current_queue () == socketQueue)
942
- {
954
+ dispatch_block_t block = ^{
955
+
943
956
if (delegateQueue)
944
957
dispatch_release (delegateQueue);
945
958
946
959
if (newDelegateQueue)
947
960
dispatch_retain (newDelegateQueue);
948
961
949
962
delegateQueue = newDelegateQueue;
963
+ };
964
+
965
+ if (dispatch_get_current_queue () == socketQueue) {
966
+ block ();
950
967
}
951
- else
952
- {
953
- dispatch_async (socketQueue, ^{
954
-
955
- if (delegateQueue)
956
- dispatch_release (delegateQueue);
957
-
958
- if (newDelegateQueue)
959
- dispatch_retain (newDelegateQueue);
960
-
961
- delegateQueue = newDelegateQueue;
962
- });
968
+ else {
969
+ if (synchronously)
970
+ dispatch_sync (socketQueue, block);
971
+ else
972
+ dispatch_async (socketQueue, block);
963
973
}
964
974
}
965
975
976
+ - (void )setDelegateQueue : (dispatch_queue_t )newDelegateQueue
977
+ {
978
+ [self setDelegateQueue: newDelegateQueue synchronously: NO ];
979
+ }
980
+
981
+ - (void )synchronouslySetDelegateQueue : (dispatch_queue_t )newDelegateQueue
982
+ {
983
+ [self setDelegateQueue: newDelegateQueue synchronously: YES ];
984
+ }
985
+
966
986
- (void )getDelegate : (id *)delegatePtr delegateQueue : (dispatch_queue_t *)delegateQueuePtr
967
987
{
968
988
if (dispatch_get_current_queue () == socketQueue)
@@ -985,10 +1005,10 @@ - (void)getDelegate:(id *)delegatePtr delegateQueue:(dispatch_queue_t *)delegate
985
1005
}
986
1006
}
987
1007
988
- - (void )setDelegate : (id )newDelegate delegateQueue : (dispatch_queue_t )newDelegateQueue
1008
+ - (void )setDelegate : (id )newDelegate delegateQueue : (dispatch_queue_t )newDelegateQueue synchronously : ( BOOL ) synchronously
989
1009
{
990
- if ( dispatch_get_current_queue () == socketQueue)
991
- {
1010
+ dispatch_block_t block = ^{
1011
+
992
1012
delegate = newDelegate;
993
1013
994
1014
if (delegateQueue)
@@ -998,24 +1018,29 @@ - (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQ
998
1018
dispatch_retain (newDelegateQueue);
999
1019
1000
1020
delegateQueue = newDelegateQueue;
1021
+ };
1022
+
1023
+ if (dispatch_get_current_queue () == socketQueue) {
1024
+ block ();
1001
1025
}
1002
- else
1003
- {
1004
- dispatch_async (socketQueue, ^{
1005
-
1006
- delegate = newDelegate;
1007
-
1008
- if (delegateQueue)
1009
- dispatch_release (delegateQueue);
1010
-
1011
- if (newDelegateQueue)
1012
- dispatch_retain (newDelegateQueue);
1013
-
1014
- delegateQueue = newDelegateQueue;
1015
- });
1026
+ else {
1027
+ if (synchronously)
1028
+ dispatch_sync (socketQueue, block);
1029
+ else
1030
+ dispatch_async (socketQueue, block);
1016
1031
}
1017
1032
}
1018
1033
1034
+ - (void )setDelegate : (id )newDelegate delegateQueue : (dispatch_queue_t )newDelegateQueue
1035
+ {
1036
+ [self setDelegate: newDelegate delegateQueue: newDelegateQueue synchronously: NO ];
1037
+ }
1038
+
1039
+ - (void )synchronouslySetDelegate : (id )newDelegate delegateQueue : (dispatch_queue_t )newDelegateQueue
1040
+ {
1041
+ [self setDelegate: newDelegate delegateQueue: newDelegateQueue synchronously: YES ];
1042
+ }
1043
+
1019
1044
- (BOOL )autoDisconnectOnClosedReadStream
1020
1045
{
1021
1046
// Note: YES means kAllowHalfDuplexConnection is OFF
@@ -1040,22 +1065,18 @@ - (void)setAutoDisconnectOnClosedReadStream:(BOOL)flag
1040
1065
{
1041
1066
// Note: YES means kAllowHalfDuplexConnection is OFF
1042
1067
1043
- if ( dispatch_get_current_queue () == socketQueue)
1044
- {
1068
+ dispatch_block_t block = ^{
1069
+
1045
1070
if (flag)
1046
1071
config &= ~kAllowHalfDuplexConnection ;
1047
1072
else
1048
1073
config |= kAllowHalfDuplexConnection ;
1049
- }
1074
+ };
1075
+
1076
+ if (dispatch_get_current_queue () == socketQueue)
1077
+ block ();
1050
1078
else
1051
- {
1052
- dispatch_async (socketQueue, ^{
1053
- if (flag)
1054
- config &= ~kAllowHalfDuplexConnection ;
1055
- else
1056
- config |= kAllowHalfDuplexConnection ;
1057
- });
1058
- }
1079
+ dispatch_async (socketQueue, block);
1059
1080
}
1060
1081
1061
1082
- (BOOL )isIPv4Enabled
@@ -1082,22 +1103,18 @@ - (void)setIPv4Enabled:(BOOL)flag
1082
1103
{
1083
1104
// Note: YES means kIPv4Disabled is OFF
1084
1105
1085
- if ( dispatch_get_current_queue () == socketQueue)
1086
- {
1106
+ dispatch_block_t block = ^{
1107
+
1087
1108
if (flag)
1088
1109
config &= ~kIPv4Disabled ;
1089
1110
else
1090
1111
config |= kIPv4Disabled ;
1091
- }
1112
+ };
1113
+
1114
+ if (dispatch_get_current_queue () == socketQueue)
1115
+ block ();
1092
1116
else
1093
- {
1094
- dispatch_async (socketQueue, ^{
1095
- if (flag)
1096
- config &= ~kIPv4Disabled ;
1097
- else
1098
- config |= kIPv4Disabled ;
1099
- });
1100
- }
1117
+ dispatch_async (socketQueue, block);
1101
1118
}
1102
1119
1103
1120
- (BOOL )isIPv6Enabled
@@ -1124,22 +1141,18 @@ - (void)setIPv6Enabled:(BOOL)flag
1124
1141
{
1125
1142
// Note: YES means kIPv6Disabled is OFF
1126
1143
1127
- if ( dispatch_get_current_queue () == socketQueue)
1128
- {
1144
+ dispatch_block_t block = ^{
1145
+
1129
1146
if (flag)
1130
1147
config &= ~kIPv6Disabled ;
1131
1148
else
1132
1149
config |= kIPv6Disabled ;
1133
- }
1150
+ };
1151
+
1152
+ if (dispatch_get_current_queue () == socketQueue)
1153
+ block ();
1134
1154
else
1135
- {
1136
- dispatch_async (socketQueue, ^{
1137
- if (flag)
1138
- config &= ~kIPv6Disabled ;
1139
- else
1140
- config |= kIPv6Disabled ;
1141
- });
1142
- }
1155
+ dispatch_async (socketQueue, block);
1143
1156
}
1144
1157
1145
1158
- (BOOL )isIPv4PreferredOverIPv6
@@ -1166,22 +1179,18 @@ - (void)setPreferIPv4OverIPv6:(BOOL)flag
1166
1179
{
1167
1180
// Note: YES means kPreferIPv6 is OFF
1168
1181
1169
- if ( dispatch_get_current_queue () == socketQueue)
1170
- {
1182
+ dispatch_block_t block = ^{
1183
+
1171
1184
if (flag)
1172
1185
config &= ~kPreferIPv6 ;
1173
1186
else
1174
1187
config |= kPreferIPv6 ;
1175
- }
1188
+ };
1189
+
1190
+ if (dispatch_get_current_queue () == socketQueue)
1191
+ block ();
1176
1192
else
1177
- {
1178
- dispatch_async (socketQueue, ^{
1179
- if (flag)
1180
- config &= ~kPreferIPv6 ;
1181
- else
1182
- config |= kPreferIPv6 ;
1183
- });
1184
- }
1193
+ dispatch_async (socketQueue, block);
1185
1194
}
1186
1195
1187
1196
- (id )userData
@@ -1203,14 +1212,19 @@ - (id)userData
1203
1212
1204
1213
- (void )setUserData : (id )arbitraryUserData
1205
1214
{
1206
- dispatch_async (socketQueue, ^{
1215
+ dispatch_block_t block = ^{
1207
1216
1208
1217
if (userData != arbitraryUserData)
1209
1218
{
1210
1219
[userData release ];
1211
1220
userData = [arbitraryUserData retain ];
1212
1221
}
1213
- });
1222
+ };
1223
+
1224
+ if (dispatch_get_current_queue () == socketQueue)
1225
+ block ();
1226
+ else
1227
+ dispatch_async (socketQueue, block);
1214
1228
}
1215
1229
1216
1230
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0 commit comments