小编Ted*_*son的帖子

为什么dispatch_sync在自定义并发队列死锁上

在自定义并发dispatch_queue上使用dispatch_sync时,我在应用程序中看到间歇性死锁.我正在使用类似于Mike Ash博客中描述的方法来支持并发读访问,但NSMutableDictionary上的线程安全突变充当当前活动网络RPC请求的缓存.我的项目使用ARC.

我创建队列:

dispatch_queue_t activeRequestsQueue = dispatch_queue_create("my.queue.name",
                                                DISPATCH_QUEUE_CONCURRENT);
Run Code Online (Sandbox Code Playgroud)

和可变字典

NSMutableDictionary *activeRequests = [[NSMutable dictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)

我从队列中读取元素,如下所示:

- (id)activeRequestForRpc: (RpcRequest *)rpc
{
    assert(![NSThread isMainThread]);
    NSString * key = [rpc getKey];
    __block id obj = nil;
    dispatch_sync(activeRequestsQueue, ^{
        obj = [activeRequests objectForKey: key];
    });
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

我在缓存中添加和删除rpcs

- (void)addActiveRequest: (RpcRequest *)rpc
{
    NSString * key = [rpc getKey];
    dispatch_barrier_async(activeRequestsQueue, ^{
        [activeRequests setObject: rpc forKey: key];
    });
}

- (void)removeActiveRequest: (RpcRequest *)rpc
{
    NSString * key = [rpc getKey]; …
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch ios

12
推荐指数
1
解决办法
1336
查看次数

不能在postgres中删除表

我是postgresql的新手,我似乎无法让它丢掉一张桌子.

db_dev=# \dt
          List of relations
 Schema |    Name     | Type  | Owner
--------+-------------+-------+-------
 public | DataSources | table | ted
 public | Emails      | table | ted
 public | Users       | table | ted
(3 rows)
Run Code Online (Sandbox Code Playgroud)

当我尝试删除users表时,它会出错:

db_dev=# drop table Users;
ERROR:  table "users" does not exist
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

postgresql

10
推荐指数
2
解决办法
7158
查看次数

OpenSSL连接错误SSL23_GET_SERVER_HELLO,但浏览器和curl有效

我正在处理一个问题,即由于openssl无法完成握手,python无法通过ssl连接到特定服务器.卷曲和我的浏览器工作.我尝试了几个不同的openssl版本和解决方案,但似乎无法连接.

以下是我在以下两个平台上尝试过的内容.OpenSSL 1.0.1e上的输出打印略有不同,但仍然是相同的错误.

Mac OSX Yosemite - OpenSSL 0.9.8zg 14 July 2015
Debian GNU/Linux 7 (wheezy) - OpenSSL 1.0.1e 11 Feb 2013
Run Code Online (Sandbox Code Playgroud)

没有指定哪个版本

openssl s_client -connect www.uk-recruitment.net:443
openssl s_client -connect www.uk-recruitment.net:443 -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' -servername uk-recruitment.net
Run Code Online (Sandbox Code Playgroud)

但我总能得到相同的结果

CONNECTED(00000003)
66716:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593: 
Run Code Online (Sandbox Code Playgroud)

如果我添加-tls1,-tls1_1-tls1_2与所有相同的选项,我得到一个稍微不同的错误:

openssl s_client -connect www.uk-recruitment.net:443 -tls1
CONNECTED(00000003)
66750:error:14094438:SSL …
Run Code Online (Sandbox Code Playgroud)

ssl openssl

7
推荐指数
1
解决办法
1万
查看次数