Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift: UnsafeMutablePointer.deinitialize fatal error with negative count when appending to array

The code below generates this error (appending to exporters):

fatal error: UnsafeMutablePointer.deinitialize with negative count

    var exporters = [AVAssetExportSession]()

    let exporter = AVAssetExportSession(asset: mainComposition, presetName: AVAssetExportPresetHighestQuality)!
    exporter.videoComposition = videoComposition
    exporter.outputFileType = AVFileTypeMPEG4
    exporter.outputURL = exportURL
    exporter.shouldOptimizeForNetworkUse = true
    exporters.append(exporter)

The other posts on StackOverflow regarding UnsafeMutablePointer.deinitialize do not shed much light on the issue, which doesn't happen consistently.

Any ideas?

like image 870
Crashalot Avatar asked Oct 17 '16 07:10

Crashalot


2 Answers

I had a similar error, the issue was caused by multiple threads modifying the array at the same time. Wrapping the append calls in a serial dispatch queue solved it for me.

    let serialQueue = DispatchQueue(label: "myqueue")

    serialQueue.sync {
        exporters.append(exporter)
    }
like image 122
Stephanus Mostert Avatar answered Sep 27 '22 13:09

Stephanus Mostert


I have solved this type of issue like this way:

DispatchQueue.global(qos: .background).sync {
        //your code 
    }
like image 37
Nomanur Avatar answered Sep 27 '22 13:09

Nomanur